1、索引失效

当查询条件包含最左列并且不跳过中间的某个列时就会走索引(顺序不影响)
当跳过多值查询中间的某一列,则注意索引长度,只会使用前面列的索引

1.1当使用了范围查询(如下),则注意索引长度,813->410,范围查询之后的条件不会走索引

图片.png

1.2不能在索引列上进行运算操作

图片.png

1.3字符串没加单引号

索引长度403,是name=’’的索引长度,status没有走索引
且ref中从1个常量变成两个

原因:MySQL底层优化器检测到status的类型为varchar,则自动将1进行隐式类型转换(即运算操作)
图片.png

1.4用or分割开的条件,如果or前的条件中的列有索引,而后面的列没有索引,则涉及的索引列不会用到

图片.png
and不会失效
图片.png

1.5以%开头的Like模糊查询,索引失效

如果仅仅是尾部模糊匹配,索引不会失效
如果是头部模糊匹配,索引会失效
前后都加上%,也会失效
图片.png

可以使用覆盖索引解决这个问题
图片.png

2、索引使用

2.1尽量使用覆盖索引,避免使用select *

图片.png
使用索引包含的字段查询时,不需要回表查询
图片.png
当添加了索引不包含的字段address,则需要会表查询
图片.png