索引失效

索引失效

只要我们了解索引是如何使用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查询以%开头会导致索引失效

练习

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容