学习笔记-MySQL索引使用

1.最左前缀法则

如果索引了多列(联合索引),要遵循最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,,并且不跳过索引中的列,如果跳跃某一列索引将部分失效(后面的字段索引失效)。

例如,建立了一个联合索引依次连接了a,b,c字段,查询b若需用到这个索引,则a必须查询,要查询c,a和b必须查询。查询的顺序无关,存在即可。(必须查询指在SQL的条件限制语句中应存在)

2.范围查询

联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。

解决方案:使用>=,<=代替>,<。

3.索引列运算

在索引列上进行运算操作,索引将失效。

4.字符串不加引号,索引失效

5.模糊查询

如果仅仅是尾部抹灰匹配,索引不会失效。如果是头部模糊匹配,索引失效。

学习笔记-MySQL索引使用_第1张图片

6.or连接的条件

用or分隔开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么设计的索引都不会被用到。

学习笔记-MySQL索引使用_第2张图片

 此图id为主键,没有为age建立索引。

学习笔记-MySQL索引使用_第3张图片

 此图为age建立索引,查询。

7.数据分布影响

如果MySQL评估使用索引比全表扫描更慢,则不适用索引。

8.SQL提示

SQL提示,是优化数据库的一个重要手段,简单来说就是在SQL语句中加入一些人为的提示来达到优化操作的目的。

学习笔记-MySQL索引使用_第4张图片

学习笔记-MySQL索引使用_第5张图片

use index()是给出建议,具体使用还要看MySQL分析的情况,可能不接受建议,force是强制使用。

9.覆盖索引

尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少select *。

学习笔记-MySQL索引使用_第6张图片

 查询索引中没有的数据,需要回表查询。

10.前缀索引

 当字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。

·语法:

create index idx_xxx on table_name (column(n));

其中column(n)中的column代表字段名,n代表前n个字符。

·前缀长度:

可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。

查询过程:

查询的语法与平常无异,但查询过程略有出入。

以此为例,先前已经建立了长度为5的email前缀索引。查询先是在前缀索引中找到 lvbu6所对应的主键ID,再回表到主键索引(此表主键索引为聚集索引)找到对应行数据,根据行数据找到email进行对比,与查询的[email protected]相同即返回行数据。之后再在前缀索引中比对下一个节点是不是lvbu6,若是,则按相同步骤找到行数据返回,再看下一个节点数据,依次重复直到下个节点数据不是lvbu6,不是则查询终止。

你可能感兴趣的:(学习,笔记)