Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

17.6.2.1 集群索引和次要索引

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

  • 当你为表定义了一个PRIMARY KEY时,InnoDB将其用作集群索引。每个表都应该定义主键。如果没有逻辑唯一且非空的列或一组列来使用主键,可以添加自增列。自增列值是唯一的,并在插入新行时自动增加。

  • 如果你没有为表定义PRIMARY KEYInnoDB将使用第一个所有关键列都定义为NOT NULL的唯一索引作为集群索引。

  • 如果表没有主键或合适的唯一索引,InnoDB将生成一个隐藏的集群索引名为GEN_CLUST_INDEX,在一个包含行ID值的synthetic列上。行是按行ID顺序排列的,该行ID是一个6字节的字段,它会单调增加随着插入新行。因此,按行ID顺序排列的行实际上是物理顺序的插入顺序。

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

Secondary 索引如何相关到聚簇索引

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

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

要充分利用InnoDB聚簇和secondary索引,请参阅第10.3节,“Optimization and Indexes”