联合索引

联合索引是指对数据库表中的多个列组合起来创建的索引。它不同于只对单个列创建的单列索引。

最左匹配原则

联合索引的核心特性是 最左前缀原则。这意味着索引是按照创建时列的顺序从左到右进行排序和存储的。

(name, age)索引为例,它的数据结构(通常是B+树)大致是这样的:

  1. 首先按照 name字段进行排序。
  2. name相同的情况下,再按照 age字段进行排序。

image.png

覆盖索引

如果查询的列都包含在联合索引中(例如 SELECT name, age FROM table WHERE name = 'Alice'),数据库可以直接从索引中获取数据,而无需回表查询数据行。这极大地提升了性能。

索引下推

在 MySQL 5.6 及以上版本中,即使查询条件没有完全遵循最左前缀(如上面的 WHERE name = 'Alice' AND salary = 50000),存储引擎也会在索引内部对可以使用的列进行判断,过滤掉不满足条件的记录,减少回表次数。这被称为 索引下推

设计原则

设计联合索引时,需要考虑查询的 WHERE子句和 ORDER BY子句。

原则:

  1. 高频查询优先:将最常用于查询条件的列放在最左边。
  2. 等值查询列在前,范围查询列在后
  3. 考虑排序(ORDER BY)