MySQL 8.4 发行说明
每个 InnoDB
表都包含一个称为聚簇索引的特殊索引,用于存储行数据。通常,聚簇索引与主键是同义词。为了从查询、插入和其他数据库操作中获得最佳性能,了解 InnoDB
如何使用聚簇索引优化常见查找和 DML 操作非常重要。
当您在表上定义
PRIMARY KEY
时,InnoDB
将其用作聚簇索引。应该为每个表定义主键。如果没有逻辑上的唯一且非空列或列集可用作主键,则添加一个自增列。自增列值是唯一的,并且在插入新行时会自动添加。如果未为表定义
PRIMARY KEY
,InnoDB
将使用第一个UNIQUE
索引作为聚簇索引,其中所有键列都定义为NOT NULL
。如果表没有
PRIMARY KEY
或合适的UNIQUE
索引,InnoDB
将在包含行 ID 值的合成列上生成一个名为GEN_CLUST_INDEX
的隐藏聚簇索引。这些行按InnoDB
分配的行 ID 排序。行 ID 是一个 6 字节字段,它随着插入新行而单调递增。因此,按行 ID 排序的行按插入顺序物理排列。
通过聚簇索引访问行速度很快,因为索引搜索直接指向包含行数据的页面。如果表很大,与使用与索引记录不同的页面存储行数据的存储组织相比,聚簇索引架构通常可以节省一次磁盘 I/O 操作。
除了聚簇索引以外的索引称为辅助索引。在 InnoDB
中,辅助索引中的每条记录都包含该行的主键列,以及为辅助索引指定的列。 InnoDB
使用此主键值在聚簇索引中搜索该行。
如果主键很长,辅助索引将占用更多空间,因此最好使用短主键。
有关利用 InnoDB
聚簇索引和辅助索引的指南,请参见 第 10.3 节,“优化和索引”。