索引在以下情况下可能失效:
-
对索引列使用函数、表达式或计算: 如果在查询条件中对索引列使用了函数、表达式或计算,数据库可能无法充分利用索引。例如,对索引列使用了
SUBSTR、CONCAT、SUM、COUNT、AVG等函数。SELECT * FROM table WHERE SUBSTR(column, 1, 3) = 'abc'; -
隐式转换: 当在查询条件中使用了隐式转换,可能导致索引失效。例如,如果索引列是字符串类型,但在查询时不使用引号括起字符串,数据库可能进行隐式转换,导致无法使用索引。
SELECT * FROM table WHERE column = 123; -- 隐式转换可能导致索引失效 -
LIKE 条件中使用通配符
%开头: 在LIKE查询中,如果通配符%出现在查询条件的开头,索引可能无法有效使用,因为无法直接进行前缀匹配。SELECT * FROM table WHERE column LIKE '%abc%'; -- 索引可能失效 -
负向查询(NOT LIKE): 对于
NOT LIKE查询,数据库可能无法有效使用索引,因为需要匹配所有不满足条件的记录。SELECT * FROM table WHERE column NOT LIKE 'abc%'; -- 索引可能失效