Skip to content

面试速答(先看这里)

**一句话结论:**另外, 还需要考虑索引失效的情况,如果发生索引失效的,那么比如 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 这两个索引之间选择其中一个,选择的时候由优化器根据区分度、选择性这样进行选择一个效率更高的。

具体选择索引会看那些信息参考:

📄 ✅为什么MySQL会选错索引,如何解决?

打开文档:✅为什么MySQL会选错索引,如何解决?

另外,还需要考虑索引失效的情况,如果发生索引失效的,那么比如 a 失效了,那么就只会走 b 的索引,索引失效的可能的情况有很多,比如函数、比如类型转换等等。

📄 ✅索引失效的问题是如何排查的,有那些种情况?

打开文档:✅索引失效的问题是如何排查的,有那些种情况?

另外,除了上面说的情况外,还有一种特殊情况是,可能会同时走a,b 两个索引。

因为在 MySQL 5.1中推出了索引合并,这个功能可以通过使用同时使用两个单独索引来提升查询效率:

📄 ✅什么是索引合并,原理是什么?

打开文档:✅什么是索引合并,原理是什么?