← 返回技术博客

Technical Writing

MySQL 索引为什么没有被使用:一份排查路径

从查询形态、选择性、类型转换和统计信息逐步定位索引失效。

先看执行计划

使用 EXPLAIN 确认访问类型、候选索引、实际索引和预估扫描行数。不要仅凭查询耗时猜测数据库是否使用了索引。

检查隐式类型转换

字符串列用数字条件比较,或关联字段类型不一致,都可能让数据库无法按预期使用索引。

检查最左前缀

联合索引的列顺序要匹配常见过滤和排序方式。跳过第一列直接查询后续列,通常不能完整利用索引。

评估选择性

只有少量不同值的列即使有索引,也可能因为回表成本而被优化器放弃。索引不是越多越好。

最后更新统计信息

大量导入或删除数据后,统计信息可能与实际分布不一致。更新统计信息并重新查看计划,比强制索引更稳妥。