索引失效

索引失效

只要我们了解索引是如何使用B+这个数据结构创建,那么就更容易理解下面索引失效的原因。

对staff表的(name,age,pos)建立联合索引,索引有没有失效可以通过explain的ref字段查看

一、全值匹配我最爱,通常以下查询效果最优

select * from staff where name = 'July' age = 20 and pos = 'dev'

二、最佳左前缀匹配,下面只使用了name索引

select * from staff where name = 'July' and pos = 'dev'

以下是查找是进行全表扫描,效率最低

select * from staff where age = 20 and pos = 'dev'

三、不在索引列上做任何的操作(计算,函数,类型转换),会导致索引失效转为全表扫描

四、存储引擎不能使用索引中范围条件右边的列(范围之后全失效),以下pos列索引失效

select * from staff where name = 'July' and age > 20 and pos = 'dev'

五、尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *

select name, age, pos from staff where name = 'July' and age = 20 and pos = 'dev'

优于

select * from staff where name = 'July' and age = 20 and pos = 'dev'

六、mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

七、字符串不加单引号会失效

八、is null,is not null也无法使用索引,索引无法存储null值

九、like查询以%开头会导致索引失效

练习

索引失效_第1张图片
image.png

你可能感兴趣的:(索引失效)