Skip to content

面试速答(先看这里)

**一句话结论:**在上面的文章介绍过,mysql选择索引的时候,有很多考量,包括了基数性、选择性、order by等。

60秒标准回答:

不一定。有可能走a的索引,有可能走b的索引

在上面的文章介绍过,mysql选择索引的时候,有很多考量,包括了基数性、选择性、order by等。优化器会根据成本预估选择一个他认为合适的索引

如果 WHERE a = xx 的过滤条件的选择性较高(即能过滤掉大量行),MySQL 可能优先使用 a 的索引来快速定位满足条件的记录

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**有可能走a的索引,有可能走b的索引。
  • **要点2:**如果 WHERE a = xx 的过滤条件的选择性较高(即能过滤掉大量行),MySQL 可能优先使用 a 的索引来快速定位满足条件的记录。
  • **要点3:**如果 WHERE a = xx 的过滤条件的选择性较低(即 a = xx 会匹配大量的记录),而 ORDER BY b 对结果的顺序要求较高,MySQL 可能使用 b 的索引来避免排序操作。

**记忆锚点:**order → WHERE → MySQL → 一个他认为合适的索引 → select → b走哪个索引

易错提醒:

  • 如果 WHERE a = xx 的过滤条件的选择性较低(即 a = xx 会匹配大量的记录),而 ORDER BY b 对结果的顺序要求较高,MySQL 可能使用 b 的索引来避免排序操作。

加分表达:

  • 优化器会根据成本预估选择一个他认为合适的索引。
  • 如果 WHERE a = xx 的过滤条件的选择性较高(即能过滤掉大量行),MySQL 可能优先使用 a 的索引来快速定位满足条件的记录。

追问准备:

  • 围绕「order」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「WHERE」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「MySQL」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

不一定。有可能走a的索引,有可能走b的索引。

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

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

在上面的文章介绍过,mysql选择索引的时候,有很多考量,包括了基数性、选择性、order by等。优化器会根据成本预估选择一个他认为合适的索引。

如果 WHERE a = xx 的过滤条件的选择性较高(即能过滤掉大量行),MySQL 可能优先使用 a 的索引来快速定位满足条件的记录。

如果 WHERE a = xx 的过滤条件的选择性较低(即 a = xx 会匹配大量的记录),而 ORDER BY b 对结果的顺序要求较高,MySQL 可能使用 b 的索引来避免排序操作。