InnoDB聚集索引,辅助索引,覆盖索引,联合索引

博客链接:Cs XJH’s Blog

聚集索引

聚集索引就是按照每张表的主键id和指向叶子结点的偏移量作为B+树的非叶子结点,行记录数据作为叶子结点,叶子结点也称之为数据页,且叶子结点通过双向链表连接。

由于一张数据表只有一个主键,因此一张数据表也只能有一个聚集索引。

聚集索引结构是B+树且叶子结点通过双向链表连接,所以对于主键的排序查找和范围查找都非常快。

辅助索引

辅助索引,也称之为非聚集索引,一张表可以有多个。

辅助索引也是B+树结构,其非叶子结点包含建立索引列的值,而其叶子结点包含建立索引列的值和书签,书签告诉InnoDB引擎哪里可以找到与索引对应的行数据,也就是相应的聚集索引键。同样,叶子结点通过双向链表连接。

覆盖索引

一个辅助索引包含了查询结果的数据就叫做覆盖索引,即从辅助索引中就可以得到查询结果,而不需要从聚集索引中查询。

覆盖索引的好处

  1. 减少IO操作
    当查询某字段时,需要先查询辅助索引,再查询聚集索引。如果在辅助索引中就找到查询结果,就不需要查询聚集索引,这样明显减少IO操作。而且辅助索引的叶子结点不包含行记录的所有数据,也可以减少IO操作。
  2. 有利于统计
    对于select count(*) from users这个查询表记录数的sql,通过遍历聚集索引和辅助索引都可以得到结果,但优化器会选择辅助索引,因为辅助索引需要的IO操作少于聚集索引。

联合索引

为多列字段建立一个索引,称之为联合索引。

联合索引需要遵从最左前缀原则。说白了就是,数据库根据你对多个字段建立索引的顺序,从左到右依次进行排序。如果最左字段没有在查询条件中使用,则不会使用该联合索引。

联合索引内部结构如图:
InnoDB聚集索引,辅助索引,覆盖索引,联合索引_第1张图片

你可能感兴趣的:(后端开发)