Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.6 InnoDB 磁盘结构  / 15.6.2 索引  /  15.6.2.1 聚簇索引和二级索引

15.6.2.1 聚簇索引和二级索引

每个InnoDB表都有一个特殊的索引,称为聚集索引,用于存储行数据。通常,聚簇索引与主键同义。要从查询、插入和其他数据库操作中获得最佳性能,了解如何InnoDB使用聚簇索引来优化常见的查找和 DML 操作非常重要。

  • 当您PRIMARY KEY在表上定义 a 时, InnoDB将其用作聚簇索引。应该为每个表定义一个主键。如果没有逻辑唯一且非空的列或列集来使用主键,则添加一个自增列。自动递增列值是唯一的,并在插入新行时自动添加。

  • 如果您没有PRIMARY KEY为表定义 a,InnoDB则使用第一个 UNIQUE索引,所有键列都定义为NOT NULL聚簇索引。

  • 如果表没有索引PRIMARY KEY或没有合适 的UNIQUE索引,则InnoDB 生成一个隐藏的聚集索引 ,该索引GEN_CLUST_INDEX在包含行 ID 值的合成列上命名。行按InnoDB分配的行 ID 排序。行 ID 是一个 6 字节的字段,随着插入新行而单调增加。因此,按行 ID 排序的行在物理上是按插入顺序排列的。

聚簇索引如何加速查询

通过聚簇索引访问行很快,因为索引搜索直接指向包含行数据的页面。如果表很大,与使用与索引记录不同的页来存储行数据的存储组织相比,聚集索引架构通常可以节省磁盘 I/O 操作。

二级索引与聚簇索引的关系

聚簇索引以外的索引称为二级索引。在InnoDB中,二级索引中的每条记录都包含该行的主键列,以及为二级索引指定的列。 InnoDB使用此主键值在聚簇索引中搜索行。

如果主键很长,二级索引会占用更多的空间,所以主键越短越好。

有关利用InnoDB 聚簇索引和二级索引的指南,请参阅 第 8.3 节,“优化和索引”