文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  聚簇索引和二级索引

17.6.2.1 聚簇索引和二级索引

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

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

  • 如果您没有为表定义 PRIMARY KEYInnoDB 将使用第一个所有键列都定义为 NOT NULLUNIQUE 索引作为聚簇索引。

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

聚簇索引如何加速查询

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

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

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

如果主键很长,二级索引会使用更多空间,因此使用短主键比较有利。

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