介绍
InnoDB存储引擎中,每张表都有一个特殊的索引称为聚集索引。通常,聚集索引是主键的同义词。为了执行查询、插入和数据库的其他操作获得最佳性能,理解InnoDB如何使用聚集索引来优化通用的查找和DML操作是非常重要的。
InnoDB聚集索引生成规则
- 当在表中定义了主键时,InnoDB使用表的主键来作为表的聚集索引。每张表都应该定义一个主键。如果在逻辑上没有唯一和非空列来定义主键,那么就增加一个自增列作为主键。
- 如果表中没有定义主键,InnoDB使用表中的第一个唯一索引(这个唯一索引必须所有的列的定义都是非空)来作为聚集索引。
- 如果表中没有主键和合适的唯一索引,那么InnoDB生成一个包含ROW_ID值的GEN_CLUST_INDEX列来作为表的聚集索引。行使用InnoDB分配的row ID来排序。row ID是一个在新行插入时的一个单调递增的6字节的字段。
聚集索引如何提升查询速度
通过聚集索引来访问一行的数据是非常快的,因为聚集索引检索直接定位到包含行数据的页。如果表文件很大,聚集索引架构通常会节省磁盘I/O。
二级索引是如何关联聚集索引的?
非聚集索引的索引就是二级索引。在InnoDB中,行的每一个二级索引都包含该行的主键。nnoDB 使用这个主键值来搜索聚集索引中的行。
如果主键值很长,二级索引就需要更多的存储空间,所以最好使用一个短的主键。