一、索引失效
1.当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
2.使用order by对数据库进行查询时,导致索引失效 ,order by走全表扫描比回表的时间更少
3.主键和唯一索引在同一列时,会导致索引失效
4.在where条件列使用函数或者是表达式,导致不能命中索引,引发失效
5.%开头的模糊查询,导致不能命中索引,引发失效
6.在索引列上使用 IS NULL 或 IS NOT NULL操作。
7.在索引字段上使用not,<>,!=
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
8.组合索引,不是使用第一列索引,索引失效。必须满足最左前缀原则,一次从最左开始匹配。
9、一些sql语句会破坏索引:某些查询的时候没有办法使用索引 比如下面的例子 ,因为没有办法使用数据结构 ,索引一般是hash或者btree结构,比如我们一般用某种数据结构二分法查询一个值,可以查到。但是我们查询一个结果,用二分法要求查询不属于某些值的,就没有办法使用数据结构,就使用不了索引。所以核心就是判断一个sql语句能不能通过数据结构来查询出结果,能查询出来就是能够使用索引,不能查询出来就是不能使用索引