联合索引
2025年4月8日大约 2 分钟
联合索引
概念
联合索引,也称为复合索引或组合索引,是在数据库中对多个字段同时建立的索引。 这种索引考虑了字段间的顺序,例如索引 (a,b,c) 和索引 (a,c,b) 是两个不同的联合索引。 联合索引的优势在于它可以通过一个索引实现多个字段的索引效果,从而节省存储空间并提高查询效率。
优势
空间和性能优化
创建一个联合索引 (a,b,c) 相当于同时创建了索引 a,索引 (a,b) 和索引 (a,b,c)。 这样一个索引就能起到多个索引的作用,减少了写操作和磁盘空间的开销。
覆盖索引
如果查询语句中的选择列完全由联合索引覆盖,比如:
select a,b,c from table where a='xxx' and b='xxx';MySQL可以直接通过遍历索引获取数据,无需回表,大大减少了随机 IO 操作。
筛选效率
联合索引可以使得通过索引筛选出来的数据更少,更精确的缩小结果集的范围,从而提高查询效率。
注意事项
假如我们对 (a,b) 段建立索引,如下图所示:

数据首先按照 a 来排序,在 a 相等的情况下才会按照 b 排序。因此我们可以看到 a 是有序的,而 b 是一种全局无序局部有序的状态。
最左匹配原则
在使用联合索引时,MySQL 会首先匹配最左边的字段。 如果查询条件中跳过了最左边的字段,索引可能不会被有效利用,因为后面的字段全局无序。
避免范围查询中断
MySQL 在使用联合索引时,会一直向右匹配直到遇到范围查询(如 >、< 等),这会导致索引的后续部分无法被利用。
当查询 a > 1 and b = 2 时,a 字段能用到索引,b 字段用不到索引。 因为 a 的值此时是一个范围,不是固定的,在这个范围内 b 值不是有序的,因此b字段用不上索引。
