【你问我答】b+树跟b树的区别是什么?

问题描述:

b+树跟b树的区别是什么?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java##面试题目#
全部评论
少个+号,经过我认真的思考
4 回复
分享
发布于 2020-06-23 11:36
就像我们小时候查过的新华字典,b+树是从目录查,b树是直接根据字典侧面字母的阴影翻。
4 回复
分享
发布于 2020-06-23 19:15
联想
校招火热招聘中
官网直投
结构上     B树中关键字集合分布在整棵树中,叶节点中不包含任何关键字信息,而B+树关键字集合分布在叶子结点中,非叶节点只是叶子结点中关键字的索引;     B树中任何一个关键字只出现在一个结点中,而B+树中的关键字必须出现在叶节点中,也可能在非叶结点中重复出现; 性能上(也即为什么说B+树比B树更适合实际应用中操作系统的文件索引和数据库索引?)     B+树的磁盘读写代价更低,因为B+树的所有非叶子节点只会存放索引信息,而真正的数据信息都只存放在叶子节点中,这样一来,每个非叶子节点存放的索引信息就更多,一次磁盘IO就可以读取更多的索引信息到内存中,可以减少磁盘IO的次数。     B+树的查询效率更加稳定,由于非叶子节点只存索引信息,而没有真正的数据信息,所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。     B+树更加适合在区间查询的情况,由于B+树的数据都存储在叶子结点中,非叶子结点均为索引,只需要扫一遍叶子结点即可得到所有数据信息,但是B树因为其非叶子结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。
1 回复
分享
发布于 2020-06-23 14:01
1. B+树的中间节点不保存数据,是纯索引,但是B树的中间节点是保存数据和索引的,相对来说,B+树磁盘页能容纳更多节点元素,更“矮胖”; 2. B+树查询必须查找到叶子节点,B树只要匹配到即可而不用管元素位置,因此B+树查找更稳定(并不慢); 3. 对于范围查找来说,B+树只需遍历叶子节点链表即可,B树却需要重复地中序遍历,在项目中范围查找又是很常见的;
5 回复
分享
发布于 2020-06-23 11:44
B+树是B-树的变体,也是一种多路搜索平衡树,区别是B+树只有达到叶子结点才命中(B-树可以在 非叶子结点命中),B-树关键字集合分布在整颗树中(即包含内部节点),B+树所有关键字都在叶子结点出现
点赞 回复
分享
发布于 2020-06-23 11:37
1、B+树的层级更少:相较于B树B+每个非叶子节点存储的关键字数更多,树的层级更少所以查询数据更快;(单一节点存储更多的元素,使得查询的IO次数更少。) 2、B+树查询速度更稳定:B+所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同所以查询速度要比B树更稳定;[O(logn)] 3、B+树天然具备排序功能:B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。 4、B+树全节点遍历更快:B+树遍历整棵树只需要遍历所有的叶子节点即可,,而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描。 B树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存有关键字其数据的地址,所以这种数据检索的时候会要比B+树快。
点赞 回复
分享
发布于 2020-06-23 12:41

相关推荐

#面经# #网龙# #笔试# #C# #我的求职思考# rt,写一下感想(类面经)可能是内推码的缘故,挺快就发笔试邮件了非测评,纯技术相关题目题型:选择+问答+编程分布:15*3  + (8+8+9) + 2*15时间:60min(从调试完设备开始算)多半寄了,选择题“标记”了 7 8道唉,饿死了,就8点吃了3个包子,3点喝了瓶魔爪。剩下时间全在“面试新东方+做网龙”新东方编程讲师后面再开...先写一下编程题,后续题型待会更:网龙的编程题不是在编译器,是类word界面进行操作(不如43991.快排(真让你写一个快排)2.截取字符串+字符串转int(前面做选择题花时间太久,导致编程快没时间了)----------------分界线(物理)---------水足饭饱,继续更选择题(15道,题量很大。且有好几道读程序的,建议标记后最后再看)以下题目全是回忆版 /doge1.一个容器里面有5个数据,问_countof(temp)的结果2,读程序题,巨长3,同24,也是个读程序,但不是很长:一个结构体,里面分别有“1个int,1个char,1个short,1个union,一个char[10]。union里面是2个int”问按1B对齐和按2B对齐,sizeof是多少(将就看下吧,嫌抽象的话最好在纸上写写)5,也是个读程序题,描述不出来...6,new在C++中是个什么东西7,double temp =3/4,知道temp是多少就行8,set容器,考迭代器的理解(别+数字!)9,遍历无序图,问auto不会是那种数据类型10,禁止修改指针,又同时禁止修改数据(俩const)11,数据结构之链表线表优缺点12,多态的八股(记住多态不能模板吧,我是这样子背的)13,this指针14,创了个对象数组obj objects = new sjsj[100],怎么删15,字符串问题(字符串不能被定义成啥样)由于鄙校晚上熄灯,一次笔者申请明日再更。希望对想要投递网龙的朋友有所帮助
投递网龙网络公司等公司10个岗位 我的求职思考
点赞 评论 收藏
转发
点赞 22 评论
分享
牛客网
牛客企业服务