总结一下b-树和b+树

我以前没有详细了解这块的时候还以为是b树是有三种呢     b树  b-树  和b+树,后来才发现根本没有b减树,那就是一个杠(-),b-树就是b树。

然后总结性的来说写一下B树和B+树的区别

B树:

          首先B树有它的阶数,可以是2阶3阶4阶。。。。。。n阶,这个阶数是已知的

上面大概就是一个B树的结构,并且有构建b树的基本过程案例,

B树是如何删除一个关键字的

有多种情况 :首先需要算出B树的节点至少需要多少的关键字,(比如5阶的,除了根节点它每一个节点分支至少是5/2向上取整就是3,3个分支则,每一个至少有2个关键字)

  1. 当删除的关键字在的节点大于至少关键字且是终端节点的时候,直接删除就可以
  2. 如果不在终端节点的话,找该节点左子树最大值或右子树中最小的值来替换该关键字
  3. 如果在终端节点且所在节点的关键字到达了下线分两种  

                *向兄弟节点借一个(让父节点的关键字下来,然后让兄弟节点的上去,就借到了)

                *兄弟节点的关键字都是下线(直接删除,然后合并(父节点下来将两个分支链接起来),选比较少的,否则随便)

B-树删除一个关键字可能造成不同的结果

B+树:

先画一个B+树的结构:

 

B+树与B树相比较

B+树是n个关键字n个分支

B+树的有叶子节点才存放信息,所有的非叶子节点仅仅是一个索引的作用  B树种关键字就是实实在在的关键字

Mysql为什么用B+树而不用B树来设置索引?

1.     首先B树的特点是深度浅,每层节点多,这样的设计就是为了减少磁盘I/O次数,但又因为B树的每个节点的关键字的date都会存在与节点种,所以他的节点会比较大,这又变相的增加了I/O次数,而B+来说的话,它的data全部在叶子节点,非叶子节点只是一个索引,节点比较小,I/O次数就比较少。

 

2.     B+树的话,他的数据全在叶子节点,所以直接对叶子节点进行一个优化,就能对所以数据进行一个优化,这里就是将所有的叶子节点设置成是一个 链表结构,遍历会特别快,而且范围查询更不用说了。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值