B+树为什么比B树强大?

我们先来看看他们的图形结构:

B树

如图一个三层的b树,查询元素(主键)29

查询过程

1,第一次磁盘IO,把9所在节点读到内存,把目标数29依此和17、35比较,17<29<35,找P2指针对应的磁盘块3;

2,第二次磁盘IO,还是读节点到内存,在内存中把29依次和26、30比较,同理找到P2指针对应的磁盘块8;

3,第三次磁盘IO,跟第二步一样,然后就找到了目标29。

//如果查找非叶子结点的关键字26,则只需要IO两次,直接返回。

在这里插入图片描述

B+树

B+树:同样查询查询元素29

查询过程

IO情况同B树。

不同点:

因为非叶子结点只存放了键值和指针,不存放数据,一个磁盘块可以存放更多的主键,所以3层的B+树可以表示上百万的数据。而B树的结构限制,不足以支持这么多的数据。

而锁定磁盘块指针,消耗内存时间因为非常短(相比磁盘的IO)可以忽略不计。

//但是如果查非叶子结点的关键字,如36,也需要IO三次到叶子结点,因为叶子结点才有数据。

在这里插入图片描述

总结

B+树相比B树优化之处:

1:稳定性优化——B树的关键字分布在整颗树中,同一个关键字只会出现一次。B+树可能会出现多次,所有的叶子结点中包含了全部关键字的信息,B树搜索有可能在非叶子结点就结束搜索,而B+树必须搜索到叶子结点,但是锁定磁盘块指针消耗可以忽略不计;

2:相同层级数数据量增加,减少IO次数——B树中间节点会保存数据,B+树的中间节点不保存数据,磁盘页能容纳更多关键字和指针信息,更“矮胖”,树的层高能进一步被压缩;

3:范围查找优化——B+树叶子结点本身依关键字的大小自小而大顺序排列而且允许链接(有序链表),只需遍历叶子节点链表即可,b树却需要重复地遍历树。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值