Skip to content

面试速答(先看这里)

**一句话结论:**不会,索引只有一个,也就是你指定的 (a, b, c) 这个复合索引。

60秒标准回答:

不会,索引只有一个,也就是你指定的 (a, b, c) 这个复合索引。 并不会单独创建a,或者ab的索引。也就是最终的索引树上只有一个。会把三个字段都放到树的节点中

之所以会有这么个问题,是因为很多人知道,(a, b, c)这个联合索引创建之后,按照a、a和b、a和c、a和b和c查询,都能用到索引

但是这是因为索引的查询遵循最左前缀匹配原则,存储的时候是按照a,b,c的顺序来的,也就是只要查询时候包含最左字段就能用到索引,但是索引树还是只有一棵的

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

回答主线:

  • **要点1:**之所以会有这么个问题,是因为很多人知道,(a, b, c)这个联合索引创建之后,按照a、a和b、a和c、a和b和c查询,都能用到索引。
  • **要点2:**但是这是因为索引的查询遵循最左前缀匹配原则,存储的时候是按照a,b,c的顺序来的,也就是只要查询时候包含最左字段就能用到索引,但是索引树还是只有一棵的。

**记忆锚点:**MySQL建了abc的联合索引 → 最左字段就能用到索引 → 也就是最终的索引树 → 把三个字段都放到树 → 这个复合索引 → 这个联合索引

加分表达:

  • 但是这是因为索引的查询遵循最左前缀匹配原则,存储的时候是按照a,b,c的顺序来的,也就是只要查询时候包含最左字段就能用到索引,但是索引树还是只有一棵的。

追问准备:

  • 围绕「MySQL建了abc的联合索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「最左字段就能用到索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「也就是最终的索引树」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

不会,索引只有一个,也就是你指定的 (a, b, c) 这个复合索引。 并不会单独创建a,或者ab的索引。也就是最终的索引树上只有一个。会把三个字段都放到树的节点中。

之所以会有这么个问题,是因为很多人知道,(a, b, c)这个联合索引创建之后,按照a、a和b、a和c、a和b和c查询,都能用到索引。

📄 ✅A,B,C的联合索引,按照 AB,AC,BC查询,能走索引吗?

打开文档:✅A,B,C的联合索引,按照 AB,AC,BC查询,能走索引吗?

但是这是因为索引的查询遵循最左前缀匹配原则,存储的时候是按照a,b,c的顺序来的,也就是只要查询时候包含最左字段就能用到索引,但是索引树还是只有一棵的。