每一张InnoDB表都有一个被称为聚簇索引的特殊索引用来存储行记录数据。通常,聚簇索引与主键同义(:聚簇索引就是指主键索引)。要想查询,插入,以及其它数据库操作获得最好的性能,了解InnoDB是怎样利用 聚簇索引来优化普通查找和DML操作就非常重要了。
- 当你在一张表上定义一个主键时,InoDB使用它当聚簇索引。每张表都应该定义一个主键。如果没有逻辑唯一且不是null的列或列的集合,添加一个自增列。自增列值是唯一的,而且随着新记录的插入而增长。
- 如果你没有定义主键,InnoDB会选择第一个所有列都是not null的唯一索引当聚簇索引。
- 如果一张表没有主键和核实的唯一索引,InnoDB会生成一个隐藏的聚簇索引,叫做GEN_CLUST_INDEX,这个聚簇索引是在包含row ID值的虚拟列上建立的。这些记录根据InnoDB分配的row ID来排序。row ID是一个6字节的字段,随着新记录的插入,会自动增加。所以,按照row ID排序的记录,在物理上也是按照插入顺序排列的。
聚簇索引是怎样加速查询的 #
通过聚簇索引访问一条记录时很快的。因为通过索引查找能直接找到包含记录数据的页面。如果表很大,使用聚簇索引架构通常比使用索引记录和数据记录分离的架构要节省磁盘I/O。
二级索引是怎样和聚簇索引关联的 #
聚簇索引之外的其它索引被称为二级索引。在InnoDB引擎里,二级索引里的每条记录都包含这条记录对应的主键,以及二级索引包含的相关列。InnoDB使用主键列在聚簇索引中查找记录。 如果主键很长,二级索引就要占用更多空间。所以,有一个短主键是有好处的。 有关使用InnoDB聚簇索引和二级索引的指导原则,请查阅章节8.3,“Optimization and Indexes”