索引失效是在面试中经常出现的问题,以下是一些常见的索引失效的情况。
1、使用了不匹配的类型进行比较
如果一个字段是字符串类型,而你用数字类型与之比较,MySQL可能无法使用该字段上的索引。
2、使用函数或表达式
当对索引列应用函数(如UPPER()、LOWER()等)或表达式时,索引通常会失效,因为MySQL需要先计算表达式的值,然后再进行比较。
3、隐式类型转换
如果索引列的数据类型与查询条件中提供的值的数据类型不匹配,MySQL可能会执行隐式类型转换,这可能导致索引失效。
4、使用 LIKE
通配符
当LIKE
模式以通配符(如“%abc”
或_
)开头时,索引会失效,但是如果是“abc%”索引不会失效。
5、使用OR
语句
使用OR操作符连接多列查询条件,导致索引失效。
6、索引列上有IS NULL
或IS NOT NULL
条件
在索引列上使用了IS NULL或IS NOT NULL操作符,导致无法使用索引。
7、使用 !=
或 <>
操作符
范围查询使用不等于操作符(!= 或 <>),导致无法使用索引。
8、非最左匹配
查询索引列不符合最左匹配原则索引也会失效。
9、索引列上使用了运算符
在索引列上使用了加减乘除运算符,导致无法使用索引。