1. B-Tree

以一颗最大度数为5(5阶)的B-tree为例,每个节点最多存储4个key,5个指针。意味着:在一个有n个key的节点中,有n+1个指针,原理如下图:

现在,依次存入如下数据:200、100、400、300、500、450、600、550。

  • 前四个数据存入后按大小排好后及指针指向规律:

  • 插入下一个数据500时,该节点已满,于是乎中间key向上裂变:

  • 继续插入,当到550时:

  • 此时,需插入的结点已满,中间key继续向上裂变:

  • 完成!!

这就是B-Tree实现原理。

视频学习资料:11. 进阶-索引-结构-Btree_哔哩哔哩_bilibili

动态图形演示网站:B-Tree Visualization (usfca.edu)

注意:动态图形演示网站需要自己插入数据创建树。

2. B+Tree

B+Tree是B-Tree的优化,所有的数据都存放在叶子节点中,非叶子节点只起到索引作用。同时,叶子节点形成一个单向链表

举例:

  • 建立一个5阶树,依次插入以下数据:200、100、400、300、500、450、600、550。

  • 插入第五个数据时,中间key向上裂变,但是该键在叶子中依然存在,并且,叶子形成单链表:

  • 所有数据插完后如下:

MySQL索引数据结构对经典的B+tree进行了优化。在原有基础上,增加一个指向相邻叶子结点的链表指针,形成带有顺序指针的B+Tree,提高区间访问的性能。对上一组数据建树结果如下:

这就是B+Tree实现原理。

视频学习资料:12. 进阶-索引-结构-B+tree_哔哩哔哩_bilibili

动态图形演示网站:B+ Tree Visualization (usfca.edu)

这是一篇学习笔记,来源于上面的视频学习资料,要是有没有讲清楚的地方小伙伴们可以看一下视频,视频中老师讲得非常清楚,共勉!