数据库中的B+树索引分为聚集索引和辅助索引,也可以叫聚簇索引与非聚簇索引,其内部都是高度平衡的B+树。
聚集索引与辅助索引最大的不同是:聚集索引叶子节点存放的是一整行信息。

1、聚集索引

  • InnoDB是索引组织表,表中的数据按照主键顺序存放,聚集索引是按照每张表的主键构造的一颗B+树。
  • 叶子节点存储了表的行数据,也叫做数据页。每个数据页通过双向链表进行链接。
  • 因为数据页只能按照一颗B+树进行排序,所以每张表只能拥有一个聚集索引。

聚集索引-id.png

因为只能在数据页上查找行记录,所以查询性能稳定;又因为数据页直接通过双向链表链接,所以范围查询很快捷。

2、辅助索引

  • 辅助索引也称非聚集索引,叶子节点除了包含键值以外,还包含与之对应的行数据的聚集索引的键值。
  • 每张表上可以有多个辅助索引。
  • 当通过辅助索引查询数据,会执行两次查询:
    首先从辅助索引中获取聚集索引的键值,再通过获取的键值去聚集索引中获取行数据。

下图中,name属性为辅助索引,通过name获取到主键id,再通过主键id就可以获取到数据行。
辅助索引-name.png

参考

MySQL索引背后的数据结构及算法原理

tencent.jpg