MySQL 索引失效的常见原因与优化策略
在数据库优化中,索引是最重要的性能优化手段之一。但在实际开发中,经常会出现 明明建了索引却没有被使用 的情况。
常见的索引失效原因包括:
1. 在索引列上进行函数操作
例如:
SELECT * FROM users
WHERE YEAR(create_time) = 2024;
WHERE YEAR(create_time) = 2024;
这里对 create_time 使用了函数,导致 MySQL 无法使用索引。
优化方式:
SELECT * FROM users
WHERE create_time >= '2024-01-01'
AND create_time < '2025-01-01';
WHERE create_time >= '2024-01-01'
AND create_time < '2025-01-01';
2. 使用 LIKE 前缀模糊查询
SELECT * FROM users
WHERE name LIKE '%tom';
WHERE name LIKE '%tom';
由于 % 在前面,索引无法使用。
如果业务允许,可以改为:
name LIKE 'tom%'
3. 隐式类型转换
例如:
SELECT * FROM users
WHERE phone = 13800138000;
WHERE phone = 13800138000;
如果 phone 字段是字符串类型,MySQL 会进行隐式转换,从而导致索引失效。
4. 违反最左前缀原则
对于联合索引:
INDEX(a, b, c)
以下查询可以使用索引:
WHERE a = ?
WHERE a = ? AND b = ?
WHERE a = ? AND b = ?
但以下查询不会使用:
WHERE b = ?
因为跳过了最左列。
通过合理设计索引结构,可以显著提升查询性能。

浙公网安备 33010602011771号