mysqlb-tree和b+tree的原理

Posted zqlmianshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysqlb-tree和b+tree的原理相关的知识,希望对你有一定的参考价值。

  1. B-tree

B-tree是一种自平衡的树形数据结构,其中每个节点最多包含m个子节点(m≥2),并且每个节点都按照顺序存储关键字和指针。根据节点的排序规则,可以搜索、插入、删除关键字。B-tree的高度相对较低,因此访问磁盘的次数比较少,具有较快的查询速度。在MySQL中,InnoDB存储引擎采用B-tree索引,将数据和索引分开存储。

  1. B+tree

B+tree是一种延伸自B-tree的树形结构,它增加了两个特性:所有关键字都存在叶节点,并且所有叶节点都相连,形成一个有序链表。B+tree不把数据存放在非叶节点,而只存放索引,这增加了数据存储和查询的效率。B+tree也是自平衡的,适合于经常插入和删除大量数据的环境。在MySQL中,MyISAM存储引擎采用B+tree索引。

总结:

B-tree和B+tree都是在磁盘上存储数据的索引结构,其目的是为了减小查询时间。B-tree主要用于随机访问和范围查询,B+tree则更适合于排序和范围查询。B+tree比B-tree更优秀,它能够大大提高查询效率,使得你的数据库搜索、排序、分页等操作更快更稳定。

Mysql B-Tree和B+Tree索引

Mysql B-Tree和B+树索引

Mysql加快数据查找使用B-Tree数据结构存储索引数据,InnoDB存储引擎实际使用B+Tree。下面首先介绍下B-Tree和B+Tree的区别:

一、B树和B+树索引(手绘图简要说明)

1.B-Tree索引:

技术图片

 

2.B+Tree索引:

技术图片

3.B-Tree 和B+Tree索引查找原理:

非叶子节点存储索引关键字,叶子节点指针指向的是被索引的数据。节点槽中存放了指向子节点的指针(可以理解为两个关键字之间),存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中值的上限和下限。

4.B-Tree 和B+Tree索引不同点:

1)B-Tree非叶子节点不仅存储索引关键字还保存除关键字外的其他字段信息,而B+Tree非叶子节点只保存索引关键字。

2)  B+Tree叶子每个叶子节点保存了指向下一叶子节点的指针(链表串联),而B-Tree没有。

 扩展:MySQL的InnoDB引擎索引要使用B+树而不是B树

(因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出)
指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;

看过一篇比较好的博客文章介绍的很清晰:https://www.seoxiehui.cn/article-155967-1.html    )

以上是关于mysqlb-tree和b+tree的原理的主要内容,如果未能解决你的问题,请参考以下文章

Mysql索引原理B-Tree, B+Tree

MySQL——B+ Tree 原理

MySQL——B+ Tree 原理

MySQL数据库索引原理 | 索引数据结构 | B+Tree

MySQL数据库索引原理 | 索引数据结构 | B+Tree

MySQL数据库索引原理 | 索引数据结构 | B+Tree