美文网首页
索引失效

索引失效

作者: MononokeHime | 来源:发表于2018-09-18 21:35 被阅读0次

    索引失效

    只要我们了解索引是如何使用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

    相关文章

      网友评论

          本文标题:索引失效

          本文链接:https://www.haomeiwen.com/subject/eedvnftx.html