MySQL 索引失效的常见原因与优化策略

在数据库优化中,索引是最重要的性能优化手段之一。但在实际开发中,经常会出现 明明建了索引却没有被使用 的情况。

常见的索引失效原因包括:

1. 在索引列上进行函数操作

例如:

 
SELECT * FROM users
WHERE YEAR(create_time) = 2024;
 

这里对 create_time 使用了函数,导致 MySQL 无法使用索引。

优化方式:

 
SELECT * FROM users
WHERE create_time >= '2024-01-01'
AND create_time < '2025-01-01';
 

2. 使用 LIKE 前缀模糊查询

 
SELECT * FROM users
WHERE name LIKE '%tom';
 

由于 % 在前面,索引无法使用。

如果业务允许,可以改为:

 
name LIKE 'tom%'
 

3. 隐式类型转换

例如:

 
SELECT * FROM users
WHERE phone = 13800138000;
 

如果 phone 字段是字符串类型,MySQL 会进行隐式转换,从而导致索引失效。


4. 违反最左前缀原则

对于联合索引:

 
INDEX(a, b, c)
 

以下查询可以使用索引:

 
WHERE a = ?
WHERE a = ? AND b = ?
 

但以下查询不会使用:

 
WHERE b = ?
 

因为跳过了最左列。


通过合理设计索引结构,可以显著提升查询性能。

posted @ 2026-03-13 19:16  诸葛码农  阅读(1)  评论(0)    收藏  举报