3.3.4 最左匹配原则
最左匹配原则(最左前缀原则)是理解 MySQL联合索引(组合索引)工作方式的基石。它直接决定了你写的 SQL 是否能高效利用索引。简单来说:
对于联合索引
(A, B, C),只有当查询条件包含最左列A或其连续前缀时,索引才能被用来进行快速查找。
为什么?这要从 B+ 树的组织方式讲起。
🧱 一、底层原理:联合索引的排序方式
假设在orders表上创建联合索引idx_abc (A, B, C),这是一个二级索引,InnoDB 会单独维护一棵 B+ 树。这棵树不是分别对 A、B、C 排序,而是将(A, B, C)看做一个整体来进行排序:
- 先按
A排序。 A相同时,按B排序。B相同时,按C排序。
所以,这棵 B+ 树中的数据在逻辑上就像字典一样:先按 A 字母顺序,A 一样再按 B,B 一样再按 C。这就导致了:
- 全局来看,
A是绝对有序的,B是局部有序的,C更是局部有序的。 - 跳过
A直接查B:因为全局上B是无序的,索引无法帮你快速定位,只能从头到尾扫描整个索引(全索引扫描),效率极低。 - 跳过
A和B直接查C:同理,C也是全局无序的,索引失效。
这就是最左前缀原则的本质。
🎯 二、命中与失效的场景详解
以下用联合索引idx_abc (A, B, C)为例。
✅ 1. 完全匹配所有列
WHEREA=1ANDB=2ANDC=3所有列都是等值查询,完美匹配索引顺序,直接精确定
