主题
面试速答(先看这里)
**一句话结论:**不会,索引只有一个,也就是你指定的 (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的顺序来的,也就是只要查询时候包含最左字段就能用到索引,但是索引树还是只有一棵的。