名字想费脑的坤宝
发布于 2026-09-28 / 1 阅读
0
0

MySQL 索引失效的几个常见场景

索引失效是慢查询里最常见的原因之一。下面几个场景是我在真实项目里反复遇到的。

1. 隐式类型转换

-- phone 是 varchar,这里会全表扫描
SELECT * FROM users WHERE phone = 13800138000;
-- 正确写法
SELECT * FROM users WHERE phone = '13800138000';

字段和传入值的类型不一致时,MySQL 会把字段转成数字比较,索引直接废掉。

2. 最左前缀被破坏

联合索引 (a, b, c) 能命中 a、a,b、a,b,c,但 b、b,c 不行。

3. 索引列上做运算或函数

WHERE DATE(created_at) = '2026-09-01' 和 WHERE amount * 2 > 100 都吃到过教训,改成范围条件即可。

4. 前导模糊匹配

LIKE '%关键字' 无法使用 B+ 树索引。数据量大的话考虑全文索引或搜索引擎。

5. OR 连接了没索引的列

只要 OR 的一侧没有索引,整个条件就可能退化成全表扫描。

怎么快速确认

EXPLAIN 看 type 和 key 两列基本够了,重点排查 type=ALL 的语句。养成上线前跑一遍慢查询日志的习惯,比出事之后再优化轻松得多。


评论