MySQL索引优化实战

在看本章节前需要先熟悉mysql 执行计划,可参考MySQL explain执行计划详解

在下列示例中,在name,age,pos上建立复合索引 idx_staffs_nameAgePos

一、全值匹配

这个最高效最直接,如下查询条件直接是字段的全值

MySQL索引优化实战_第1张图片

二、最左前缀匹配

如果索引了多列如a、b、c时就需要遵循最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。

MySQL索引优化实战_第2张图片

三、索引列少计算

尽可能避免在索引列进行计算,否则会引起索引失效,

MySQL索引优化实战_第3张图片

四、范围后全失效

在进行范围查询时,范围后的索引全会失效导致查询效率降低,如下查询,只能用到name,age索引,pos将失效

MySQL索引优化实战_第4张图片

五、尽量使用覆盖索引

解释:当你的索引满足你要查询的数据时将会用到覆盖索引,如下,select * 会查询所有列,其中有些列并未建索引,但select name,age,pos时三个列都在索引之中,因此用到了覆盖索引,

MySQL索引优化实战_第5张图片

六、使用不等于(!=)时无法使用索引

MySQL索引优化实战_第6张图片

七、is null / is not null无法使用索引

在实际应用中应尽量避免null字段,如果需要为空也应该设定为''空字符串

MySQL索引优化实战_第7张图片

八、like以通配符开始无法使用索引,百分Like加右边(like 'aa%')

MySQL索引优化实战_第8张图片

如果必须要使用Like '%%',可以在查询列上索引,如下:

MySQL索引优化实战_第9张图片

九、字符串不加单引号''索引失效

MySQL索引优化实战_第10张图片

十、少用OR,用OR连接索引失效

MySQL索引优化实战_第11张图片

 

总结练习:

MySQL索引优化实战_第12张图片

你可能感兴趣的:(MySQL)