理解聚簇索引
聚簇索引(Cluster Index)也叫索引组织表(Index-organized Table),MySQL用户经常称呼为前者。 聚簇索引并不是数据库索引的某个种类,其描述的是数据的一种存储方式 。我们知道,在InnoDB中,数据是以B+Tree的形式存储的,其特点就是数据都存储在叶子节点上,非叶子节点上只存索引信息,即key值和指向子节点的指针。这种索引和数据的存储方式就叫做聚簇索引,“聚簇”的意思就是通常来说,数据行和相邻的健挨着。 InnoDB通过主键来聚集数据,也就是说聚簇索引的B+Tree上的叶子结点所存储的key总是主键,如果没有定义主键,InnoDB会选择一个唯一的非空索引代替,如果没有这样的索引,InnoDB会隐式地定义一个主键来聚集(存储)数据,这个隐式的主键被称为rowID。 在InnoDB中,存储聚簇索引的B+Tree的叶子节点是一个数据页,默认大小为16K,这些数据页上的数据其实是一个有序链表,会按照主键递增的顺序来进行存储。在上图中,如果要访问ID为10的记录,InnoDB根据索引找到了key为11的索引,访问其左子节点,然后进行遍历(由于在一个数据页中的数据的存放位置是连续的,所以不会有多次寻址的额外开销),比较key值直到找到ID为10的记录。 对于非聚簇索引,InnoDB通常在叶子节点上存储的是数据行的主键值,命中非聚簇索引时