联合索引与最左前缀原则详解
一、联合索引概念
联合索引(Composite Index)又称复合索引,是指由多个列组合构成的B-Tree索引。与单列索引不同,联合索引按照定义的列顺序将多个字段值组合在一起建立索引结构。
联合索引的本质是将多个字段的有序排列组合成一个索引键,通过这个组合键来加速查询
1.1 联合索引的存储结构
在B+树结构中:
- 索引键按照列定义的顺序拼接
- 先按第一列排序,第一列相同再按第二列排序,以此类推
- 叶子节点存储的是索引列值+主键值(非聚簇索引)
例如索引idx_a_b_c(a,b,c)
,存储时类似:
(a1,b1,c1) -> PK1
(a1,b1,c2) -> PK2
(a1,b2,c1) -> PK3
(a2,b1,c1) -> PK4
二、最左前缀原则
最左前缀原则(Leftmost Prefix Principle)是联合索引的核心使用规则:
查询必须从索引的最左列开始,并且不能跳过中间的列,才能充分利用联合索引
2.1 原则详解
- 必须包含最左列:任何使用联合索引的查询都必须包含第一列
- 不能跳过中间列:如果查询条件跳过了中间的列,则后续列的索引将失效
- 范围查询后的列失效<