- 使用函数或表达式进行查询
有时候,在查询条件中使用函数或表达式可能导致索引失效。让我们看一个例子:
SELECT * FROM users WHERE UPPER(name) = 'JOHN';
在这个查询中,我们使用了UPPER
函数将name
列的值转换为大写,并与字符串'JOHN'
进行比较。由于函数UPPER
的存在,MySQL无法直接使用索引进行匹配,而是需要对name
列的每一行应用函数,然后再进行比较。这会导致索引失效,并且可能导致全表扫描。
为了避免索引失效,可以修改查询条件,将函数应用于常量而不是索引列,如下所示:
SELECT *