主题
面试速答(先看这里)
**一句话结论:**另外, 还需要考虑索引失效的情况,如果发生索引失效的,那么比如 a 失效了,那么就只会走 b 的索引 ,索引失效的可能的情况有很多,比如函数、比如类型转换等等。
60秒标准回答:
首先, 正常情况下,如果没有 a,b 的联合索引的话,这条 SQL 应该会在 a 和 b 这两个索引之间选择其中一个 ,选择的时候由优化器根据区分度、选择性这样进行选择一个效率更高的
具体选择索引会看那些信息参考
另外, 还需要考虑索引失效的情况,如果发生索引失效的,那么比如 a 失效了,那么就只会走 b 的索引 ,索引失效的可能的情况有很多,比如函数、比如类型转换等等
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**首先, 正常情况下,如果没有 a,b 的联合索引的话,这条 SQL 应该会在 a 和 b 这两个索引之间选择其中一个 ,选择的时候由优化器根据区分度、选择性这样进行选择一个效率更高的。
- **要点2:**另外,除了上面说的情况外, 还有一种特殊情况是,可能会同时走a,b 两个索引。
- **要点3:**因为在 MySQL 5.1中推出了 索引合并 ,这个功能可以通过使用同时使用两个单独索引来提升查询效率:
**记忆锚点:**b两个单独索引 → 具体选择索引 → where → 的联合索引 → 这两个索引 → MySQL
加分表达:
- 首先, 正常情况下,如果没有 a,b 的联合索引的话,这条 SQL 应该会在 a 和 b 这两个索引之间选择其中一个 ,选择的时候由优化器根据区分度、选择性这样进行选择一个效率更高的。
- 具体选择索引会看那些信息参考: 另外, 还需要考虑索引失效的情况,如果发生索引失效的,那么比如 a 失效了,那么就只会走 b 的索引 ,索引失效的可能的情况有很多,比如函数、比如类型转换等等。
- 因为在 MySQL 5.1中推出了 索引合并 ,这个功能可以通过使用同时使用两个单独索引来提升查询效率:
追问准备:
- 围绕「b两个单独索引」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「具体选择索引」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「where」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
首先,正常情况下,如果没有 a,b 的联合索引的话,这条 SQL 应该会在 a 和 b 这两个索引之间选择其中一个,选择的时候由优化器根据区分度、选择性这样进行选择一个效率更高的。
具体选择索引会看那些信息参考:
另外,还需要考虑索引失效的情况,如果发生索引失效的,那么比如 a 失效了,那么就只会走 b 的索引,索引失效的可能的情况有很多,比如函数、比如类型转换等等。
另外,除了上面说的情况外,还有一种特殊情况是,可能会同时走a,b 两个索引。
因为在 MySQL 5.1中推出了索引合并,这个功能可以通过使用同时使用两个单独索引来提升查询效率: