B树和B+树的区别

首先来介绍一个工具或者是网站(当然是你能打开的情况下),如果对一个数据结构感觉有点问题,可以看看这个网站的演示,不管是插入还删除之类的这些可能在代码上看起来有点难懂的,经过动态演示,会有一个不同的理解。

www.cs.usfca.edu

B树和B+树的区别_第1张图片
找你想看的一个数据结构,点进去,比如说我选择了B TreesB树点进去,效果如下:

B树和B+树的区别_第2张图片

你自己可以添加元素,删除元素,修改元素去观察数据结构了。

B+树和B树相比的主要区别:
1,就是B+树所有关键码都在叶子节点
2,B+树的叶子节点是带有指针的,且叶节点本身按关键码从小到大顺序连接
3,在搜索过程中,如果查询和内部节点的关键字一致,那么搜索过程不停止,而是继续向下搜索这个分支

对照同样5个元素的排序就知道了
B树
B树和B+树的区别_第3张图片
B+树
B树和B+树的区别_第4张图片

可以看出来B+树文件系统,数据库系统当中,更有优势,更高效。
B+树更有利于对数据库的扫描 ,因为所有元素都在叶子节点上。
B+树的查询效率更加稳定 ,所谓的稳定就是B树最后就是要找到叶子节点,就是不管你找谁都有从头走到尾,不会出现那个特别长,那个特别短。(这个可以在我推荐的这个工具演示一下寻找某个元素的过程)
B+树没有像B树一样,把一些关键码每层都放一部分,之间存在互相之间的关系,指针。在考虑指针指向内容上,B树没有这些要存,反而数据量大的情况的,占的空间要比B树小。

最后补一下B树,B+树的概念:
一棵m阶B树是一棵平衡的m路搜索树,它或者是空树,或者是满足下列性质的树:

  • 树中每个结点至多有m棵子树。(即至多含有m-1个关键字,两颗子树指针夹着一个关键字);
  • 若根结点不是终端结点,则至少有两颗子树。(至少一个关键字);
  • 除根结点外的所有非叶子结点至少有[m/2]棵子树。(即至少含有[m/2]-1个关键字);
  • 所有的叶子结点出现在同一个层次上,不带信息。(就像是折半查找判断树中查找失败的结点)。
  • 每一个结点中的关键字满足从左到右依次增大的规则。

B+树是B树上的一个修改或者改版:

  • n棵子tree的节点包含n个关键字,不用来保存数据而是保存数据的索引。
  • 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  • 所有的非终端结点可以看成是索引部分,结点中仅含其子树中的大(或小)关键字。
  • B+树中,数据对象的插入和删除仅在叶节点上进行。
  • B+树有2个头指针,一个是树的根节点,一个是小关键码的叶节点。

你可能感兴趣的:(数据结构,数据结构,b树,数据库)