-
查询条件未使用索引列
描述:查询条件没有涉及索引列时,MySQL 会直接执行全表扫描。
示例:SELECT * FROM users WHERE non_indexed_column = 'example';
解决方法:在需要频繁查询的列上创建索引。
-
查询条件对索引列使用了函数或表达式
描述:对索引列进行函数或表达式操作会导致索引失效。
示例:SELECT * FROM users WHERE LEFT(name, 3) = 'Ali';
解决方法:避免对索引列进行变换,改为:
SELECT * FROM users WHERE name LIKE 'Ali%';
-
数据类型不一致引发隐式类型转换
描述:当查询条件值的类型与索引列类型不一致时,MySQL 会进行隐式类型转换。
示例:SELECT * FROM users WHERE phone = 1234567890; -- phone 是 VARCHAR
解决方法:确保类型一致:
SELECT * FROM users WHERE phone = '1234567890';
-
联合索引使用时的范围查询阻断
描述:在联合索引中,如果某列的范围查询中断了索引的有序性,后续列的索引无法生效。
示例:SELECT * FROM users WHERE name = 'Alice' AND age > 30 AND city =