利用这篇文章对MySQL聚簇索引的一些概念做一些总结,有不对的地方还请各位看官帮忙指正。/手动抱拳
聚簇索引定义
聚簇索引就是每张表构建一个B+树,每一个节点都是一页,叶子节点存放的是整张表的行记录,所以叶子节点也叫数据页。
MySQL中的页
页的概念
页可以理解为一个存储空间,MySQL中每一页大小为16kb(16384)。MySQL每次查询数据时都是以页为单位取数据到内存中,即每次查询至少取一页的数据到内存,也叫局部性原则
页的结构
聚簇索引的构建
当一张表的数据页超过两页时(叶子节点数 >= 2),会将原先的数据页copy一份,与新页一起充当叶子节点,第一页作为根节点,修改根节点。根节点存储的是每个数据页的起始主键。由于每一页的page directory中也会存放对应的主键,所以聚簇索引中主键会有冗余。
非聚簇索引
非聚簇索引也是一棵B+树。我们通常所说的索引都是辅助索引,辅助索引其实就是非聚簇索引,因为其叶子节点并不存储行记录,而是存储主键值。当我们使用辅助索引查询时,其实是先通过非聚簇索引查询到主键值,然后根据主键值去聚簇索引中查询实际的行记录,这个根据主键值去聚簇索引中查询的过程就叫做回表。
注意:我们这里所说的主键值并不一定是MySQL表中的主键,如果我们没有建立主键,那么MySQL会选择唯一索引建立B+树,如果没有唯一索引,那么MySQL会使用一个隐藏列,row_id去建立B+树。