MySQL 8.3 Release Notes
每个 InnoDB
表都有一个特殊的索引称为聚簇索引,该索引存储行数据。通常,聚簇索引与主键相同。为了从查询、插入和其他数据库操作中获得最佳性能,了解 InnoDB
如何使用聚簇索引来优化常见的查找和 DML 操作非常重要。
-
当您在表上定义
PRIMARY KEY
时,InnoDB
将其用作聚簇索引。每个表都应该定义一个主键。如果没有逻辑唯一且非空的列或列集来用作主键,请添加一个自动递增列。自动递增列值是唯一的,并且在插入新行时自动添加。 -
如果您没有为表定义
PRIMARY KEY
,InnoDB
将使用第一个UNIQUE
索引,其中所有键列定义为NOT NULL
作为聚簇索引。 -
如果表没有
PRIMARY KEY
或合适的UNIQUE
索引,InnoDB
将生成一个名为GEN_CLUST_INDEX
的隐藏聚簇索引,该索引基于一个合成列,该列包含行 ID 值。行按行 ID 排序,该行 ID 是InnoDB
分配的 6 字节字段,该字段随着新行的插入而单调递增。因此,按行 ID 排序的行实际上是按照插入顺序排列的。
除了聚簇索引外的索引称为次要索引。在 InnoDB
中,每个次要索引记录包含行的主键列,以及指定的次要索引列。InnoDB
使用该主键值在聚簇索引中搜索行。
如果主键很长,次要索引将使用更多的空间,因此拥有一个短主键是有利的。
有关如何充分利用 InnoDB
聚簇索引和次要索引的指南,请参阅 第 10.3 节,“优化和索引”。