索引失效常见情景
索引失效针对的组合索引?
若一个字段上有多种索引呢?某一索引失效,可以继续使用其他索引不影响。
索引 idx_staffs_nameAgePos 建立索引时 以 name , age ,pos 的顺序建立的。全值匹配表示按顺序匹配的
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
1.当使用覆盖索引的方式时,(select name/age/id from staffs where age=10 (后面没有其他没有索引的字段条件)),即使不是以 name 开头,也会使用 idx_nameAge 索引。
既 select后的字段有索引,where 后的字段也有索引,则无关执行顺序。
2.除开上述条件 才满足最左前缀法则。
失效
[图片上传失败...(image-538088-1614697987990)]
问题:解决like '%字符串%'时索引不被使用的方法?
用staffs表做案例,索引:
执行以下操作:
没有单引号情况,索引失效
有单引号用到了索引
假设index(a,b,c)
序号7 左边定值,所以索引都能用到
序号8 左边值不确定
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
LIKE百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;