在 InnoDB 存储引擎中,按索引是否建立在主键之上(或者说,索引是否直接承载整行数据)来划分,索引可以分为两类:聚簇索引(Clustered Index)和二级索引(Secondary Index,也称辅助索引)。这是 InnoDB 最核心的物理存储架构,直接决定了查询是否需要“回表”,以及主键设计的重要性。
🏠 一、聚簇索引(主键索引)
1. 定义
聚簇索引是将数据存储与索引结合到一起的索引。在 InnoDB 中,聚簇索引的 B+ 树叶子节点直接包含整行数据,而不是指向数据的指针。
换句话说,表的数据就是聚簇索引的叶子节点。因此,一张表只能有一个聚簇索引。
2. 聚簇索引的选取规则
当创建表时,InnoDB 按以下优先级确定聚簇索引:
- 如果定义了PRIMARY KEY,则使用主键作为聚簇索引。
- 如果没有主键,则选择第一个UNIQUE NOT NULL索引作为聚簇索引。
- 如果都没有,InnoDB 会自动生成一个隐藏的 6 字节
row_id作为聚簇索引。
强烈建议:始终显式定义一个有序的、自增的、与业务无关的主键(如BIGINT AUTO_INCREMENT),以优化插入性能和空间利用。
3. 存储与查询特点
- 叶子节点 = 行数据:在 B+ 树叶子页中,按主键顺序存储所有列的值。
- 主键查找最快<