组合索引是索引结构设计方式,
聚簇索引是数据的物理存储方式,
覆盖索引是查询使用索引的方式。
🔸 一、组合索引(联合索引 / Composite Index)
✅ 定义:
组合索引是对多个列联合建立的一个索引。比如:
CREATE INDEX idx_name_age ON users(name, age);
这是一个对 (name, age)
两列的联合索引。
✅ 特点:
-
使用“最左前缀原则”:可以用于
name
、name + age
的查询,但不能单独用于age
。 -
减少多列查询时的索引数量,提高性能。
🔸 二、聚簇索引(Clustered Index)
✅ 定义:
聚簇索引是指表的数据行实际存储在索引的叶子节点中。在 MySQL 的 InnoDB 引擎中,主键就是聚簇索引。
✅ 特点:
-
每张表只能有一个聚簇索引;
-
数据按照聚簇索引排序存储;
-
二级索引存储的是主键值。
🔸 三、覆盖索引(Covering Index)
✅ 定义:
覆盖索引是指一个查询所需要的所有列都可以从一个索引中直接获取到,不需要回表查询主键。
✅ 举例:
-- 联合索引
CREATE INDEX idx_name_age ON users(name, age);
-- 查询只查name和age,不查其他列
SELECT name, age FROM users WHERE name = 'Alice';
如果执行计划中显示:
Extra: Using index
就说明用了覆盖索引,即从 idx_name_age
索引中就能拿到 name
和 age
,不需要回表。