MySQL · 主观题 · 第 40 题
Java 后端开发面试 · 第 40 题
列举 MySQL 索引失效的常见场景。
参考答案
1. 违反最左前缀:联合索引 (a, b, c) 只查 b、c。
2. 在索引列上做函数运算或表达式计算,如 WHERE DATE(create_time) = …、WHERE id + 1 = 10。
3. 隐式类型转换:字符串列和数字比较,如 phone = 13800000000。
4. 前导模糊匹配:LIKE '%abc'(LIKE 'abc%' 可以走索引)。
5. OR 连接的条件里有一侧没有索引。
6. 字符集或排序规则不一致的列做关联。
7. 联合索引中某列用了范围查询,它右边的列无法用于定位(不过 5.6 起的索引下推仍可以用它们在引擎层过滤)。
8. 优化器根据统计信息判断全表扫描更便宜,比如区分度低的列,或者需要回表的行太多;!=、NOT IN、IS NOT NULL 也常因此不走索引。
9. 排查方法:EXPLAIN 看 key 和 type;统计信息不准时执行 ANALYZE TABLE。
解析
能讲清楚每种场景背后的原因(破坏有序性或优化器的成本估算)更好。