B树和B+树

匿名 (未验证) 提交于 2019-12-03 00:33:02

一、为什么要有B树?

学习任何一个东西我们都要知道为什么要有它,B树也一样,既然存储数据,我们为什么不用红黑树呢?
这个要从几个方面来说了:

(1)计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。

(2)所以当你用红黑树的时候,你一次只能得到一个键值的信息,而用B树,可以得到最多M-1个键值的信息。这样来说B树当然更好了。

(3)另外一方面,同样的数据,红黑树的阶数更大,B树更短,这样查找的时候当然B树更具有优势了,效率也就越高。

二、B树

对于B树,我们首先要知道它的应用,B树大量应用在数据库和文件系统当中。

B树是对二叉查找树的改进。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树为系统最优化大块数据的读和写操作。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文件系统。

假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值,只需要读取两次硬盘。B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。

B树的结构:

1. 根节点至少有两个子节点 ;

2. 每个节点有M-1个key,并且以升序排列 ;

3. 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间 ;

4. 其它节点至少有M/2个子节点 ;

5. 所有叶子节点都在同一层 。

三、B+树

B+树是B-树的变体,也是一种多路搜索树,其定义基本与B树相同,除了:

1. 非叶子结点的子树指针与关键字个数相同;

2. 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);

3. 为所有叶子结点增加一个链指针;

4. 所有关键字都在叶子结点出现。

四、B树与B+树的对比

B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。

1、B树的优点

1. B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

2、B+树的优点

1. 由于B+树在内部节点上不好含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子几点上关联的数据也具有更好的缓存命中率

2. B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好

3、应用

B树和B+树经常被用于数据库中,作为MySQL数据库索引。索引(Index)是帮助MySQL高效获取数据的数据结构。为了查询更加高效,所以采用B树作为数据库的索引。

转自:https://blog.csdn.net/qq_26768741/article/details/53164202
https://blog.csdn.net/feynman1999/article/details/72667919

文章来源: B树和B+树
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!