Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Clustered and Secondary Indexes

17.6.2.1 聚簇索引和次要索引

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

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

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

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

聚簇索引如何加速查询

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

次要索引如何与聚簇索引相关

除了聚簇索引外的索引称为次要索引。在 InnoDB 中,每个次要索引记录包含行的主键列,以及指定的次要索引列。InnoDB 使用该主键值在聚簇索引中搜索行。

如果主键很长,次要索引将使用更多的空间,因此拥有一个短主键是有利的。

有关如何充分利用 InnoDB 聚簇索引和次要索引的指南,请参阅 第 10.3 节,“优化和索引”