索引失效的场景

最近看一些博客文章,稳重列举了一些索引失效的场景,作了验证,发现有些结论是对的,有些事错误的。

    1. 如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列
    1. 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
      这个不是绝对的,如果函数没有对索引列的值作转换,就能使用索引
    1. 存储引擎不能使用索引中范围条件右边的列


      image.png
    1. mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
      非绝对,如果是主键,依然可以
      非主键,索引失效


      image.png

      主键,走索引


      image.png
    1. is null ,is not null 也无法使用索引
      错误


      image.png

如果使用= null,!=null索引失效

image.png
image.png
    1. like以通配符开头('%abc...') mysql索引失效会变成全表扫描的操作
      因为违背了最左前缀原则
    1. 少用or,用它来连接时会索引失效
      错误!
image.png

or 条件中有未建立索引的列才,索引失效
没用使用索引

image.png

使用索引

image.png

参考

MySQL之SQL优化详解(三)

https://www.cnblogs.com/dwlovelife/p/11110561.html

MySQL 查看执行计划

https://www.cnblogs.com/klvchen/p/10137117.html

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