聚集索引和二级索引
每个InnoDB表都有一个特殊的索引,称为聚簇索引,用于存储行数据。通常,聚簇索引与主键同义。为了从查询,插入和其他数据库操作中获得最佳性能,您必须了解如何InnoDB使用聚簇索引为每个表优化最常见的查找和DML操作。
- 在
PRIMARY KEY表上定义a 时,InnoDB将其用作聚簇索引。为您创建的每个表定义一个主键。如果没有逻辑唯一且非空的列或列集,请添加一个新的自动递增列,其值将自动填充。 - 如果您没有
PRIMARY KEY为表定义,MySQL会UNIQUE在所有键列所在的位置找到第一个索引,NOT NULL并将InnoDB其用作聚集索引。 - 如果表没有索引
PRIMARY KEY或没有合适的UNIQUE索引,则在InnoDB内部生成一个隐藏的聚集索引GEN_CLUST_INDEX,该索引在包含行ID值的合成列上命名。这些行由InnoDB分配给该表中各行的ID排序。行ID是一个6字节的字段,随着插入新行而单调增加。因此,按行ID排序的行实际上在插入顺序上。
聚集索引如何加快查询速度
通过聚集索引访问行是快速的,因为索引搜索直接导致包含所有行数据的页面。如果表很大,则与使用不同于索引记录的页面存储行数据的存储组织相比,聚集索引体系结构通常可以节省磁盘I / O操作。
二级索引如何与聚簇索引相关
除聚集索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的每个记录都包含该行的主键列以及为辅助索引指定的列。InnoDB使用此主键值在聚集索引中搜索行。
如果主键较长,则辅助索引将使用更多空间,因此具有短主键是有利的。
有关利用InnoDB聚簇索引和二级索引的指南,请参见“优化索引”。
