mysql 索引失效
1、like通配符,左侧开放情况下,全表扫描
2、or条件筛选,可能会导致索引失效
3、where中对索引列使用mysql的内置函数,一定失效
4、where中对索引列进行运算(如,+、-、*、/),一定失效
5、类型不一致,隐式的类型转换,导致的索引失效
6、where语句中索引列使用了负向查询,可能会导致索引失效。负向查询包括:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,其中:!< !> SQLServer语法。
7、索引字段可以为null,使用is null或is not null时,可能会导致索引失效
8、隐式字符编码转换导致的索引失效
9、联合索引中,where中索引列违背最左匹配原则,一定会导致索引失效
10、MySQL优化器的最终选择,不走索引
11、使用 OR
关键字会导致索引失效,不过如果要想使用OR 又不想让索引失效,那就得需要为or
条件中的每个列都建立索引。这很显然是和上面的不要建立太多的索引相违背。
12.联合索引如果不遵循最左前缀原则,那么索引也将失效
13.使用模糊查询的时候以%开头也会导致索引失效(这里就不再重复原因了,因为前面的文章都是说过了,这里就是为了帮助大家再会回忆下)
14.索引列如果使用了隐式转换也会导致索引失效
为频繁查询的字段建立索引
避免为"大字段"建立索引
选择区分度大的列作为索引
尽量为ORDER BY 和 GROUP BY 后面的字段建立索引
不要在条件中使用函数
如果是已经建立好的索引的字段在使用的时候执行了函数操作,那么这个索引就使用不到了。
不要建立太多的索引
频繁增删改的字段不要建立索引
小蚊子大人