当前位置:首页 >休闲 >面试官:谈谈你对索引的认知系列之B+树 也是官谈一种多路搜索树

面试官:谈谈你对索引的认知系列之B+树 也是官谈一种多路搜索树

2024-06-29 09:27:13 [百科] 来源:避面尹邢网

面试官:谈谈你对索引的面试认知系列之B+树

作者:架构精进之路 运维 数据库运维 B+树是B-树的一个升级版,也是官谈一种多路搜索树,相对于B树来说B+树更充分的谈对利用了节点的空间,让查询速度更加稳定,索引B树其速度完全接近于二分法查找。知系

[[403232]]

本文转载自微信公众号「架构精进之路」,面试作者架构精进之路。官谈转载本文请联系架构精进之路公众号。谈对

写在前面

前面一讲我们介绍了B-树的索引B树特性,以及与平衡二叉树的知系对比得出B-树这类数据结构的优势。

面试官:谈谈你对索引的认知系列之B+树 也是官谈一种多路搜索树

《面试官:谈谈你对索引的面试认知》系列之B-树

面试官:谈谈你对索引的认知系列之B+树 也是官谈一种多路搜索树

那B+树作为B树的一个升级版,那它又有哪些优势呢?官谈本讲继续为大家揭开B+树的神秘面纱,让它不再成为你前进的谈对羁绊!

面试官:谈谈你对索引的认知系列之B+树 也是官谈一种多路搜索树

B+树 简介

B+树是B-树的一个升级版,也是索引B树一种多路搜索树,相对于B树来说B+树更充分的知系利用了节点的空间,让查询速度更加稳定,其速度完全接近于二分法查找。

从上图B-树的简化图,我们可以发现几个显著特点:

据只出现在叶子节点(非叶子节点并不存储真正的 data)

所有叶子节点增加了一个链指针

B+树 VS B-树

1、数据实现结构不同,查询复杂度不同

B+树内节点不存储数据,所有 data 存储在叶节点导致查询时间复杂度固定为 log n。而B-树查询时间复杂度不固定,与 key 在树中的位置有关,最好为O(1)。

如我们分别查询B-树/B+树节点 key 为 50 的 data。

  • B-树

key 为 50 的节点恰好就在第一层,B-树只需要一次磁盘 IO 即可完成查找。所以说B-树的查询最好时间复杂度是 O(1)。

  • B+树

由于B+树所有的 data 域都在根节点,所以查询 key 为 50的节点必须从根节点索引到叶节点,时间复杂度固定为 O(log n)。

小结:

B树的由于每个节点都有key和data,所以查询的时候可能不需要O(logn)的复杂度,甚至最好的情况是O(1)就可以找到数据,而B+树由于只有叶子节点保存了data,所以必须经历O(logn)复杂度才能找到数据。

2、B+树可以更好的利用局部性原理

B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。

空间局部性原理:如果一个存储器的某个位置被访问,那么将它附近的位置也会被访问。

若我们访问节点 key为 50,则 key 为 55、60、62 的节点将来也可能被访问,我们可以利用磁盘预读原理提前将这些数据读入内存,减少了磁盘 IO 的次数。当然B+树也能够很好的完成范围查询。比如查询 key 值在 50-70 之间的节点。

小结:

由于B+树的叶子节点的数据都是使用链表连接起来的,而且他们在磁盘里是顺序存储的,所以当读到某个值的时候,磁盘预读原理就会提前把这些数据都读进内存,使得范围查询和排序都很快。

3、B+树每个节点能索引的范围更大更精确

因为它内节点不存储data,这样一个节点就可以存储更多的key。

由于B-树节点内部每个 key 都带着 data 域,而B+树节点只存储 key 的副本,真实的 key 和 data 域都在叶子节点存储。前面说过磁盘是分 block 的,一次磁盘 IO 会读取若干个 block,具体和操作系统有关,那么由于磁盘 IO 数据大小是固定的,在一次 IO 中,单个元素越小,量就越大。这就意味着B+树单次磁盘 IO 的信息量大于B-树,从这点来看B+树相对B-树磁盘 IO 次数少。

从上图可以看出相同大小的区域,B-树仅有 2 个 key,而B+树有 3 个 key。

小结:

由于B树的节点都存了key和data,而B+树只有叶子节点存data,非叶子节点都只是索引值,没有实际的数据,这就时B+树在一次IO里面,能读出的索引值更多。从而减少查询时候需要的IO次数!

总结

B-树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存有关键字其数据的地址,所以这种数据检索的时候会要比B+树快。

但是B+树的优势更加明显:

  • B+树的层级更少

相较于B树B+每个非叶子节点存储的关键字数更多,树的层级更少所以查询数据更快;

  • B+树查询速度更稳定

B+所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同所以查询速度要比B树更稳定;

  • B+树天然具备排序功能

B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。

  • B+树全节点遍历更快

B+树遍历整棵树只需要遍历所有的叶子节点即可,而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描。

 

责任编辑:武晓燕 来源: 架构精进之路 索引B+树数据

(责任编辑:休闲)

    推荐文章
    • 人寿保险有哪些险种 中国人寿保险怎么样?

      人寿保险有哪些险种 中国人寿保险怎么样?人寿保险有哪些险种?人寿保险的险种包括定期人寿保险,终身人寿保险,生存保险,生死两全保险,养老保险(由生存保险和死亡保险结合而成,是生死两全保险的特殊表现形式)等。此外,因为巨大灾难也成为了威胁人身安 ...[详细]
    • 致·阿尔萨斯 《魔兽世界》巫妖王之怒线上艺术展开放

      致·阿尔萨斯 《魔兽世界》巫妖王之怒线上艺术展开放今日9月16日),魔兽世界官方宣布即日起至10月14日,“致·阿尔萨斯“-《魔兽世界》巫妖王之怒线上艺术展正式对外开放!在动身前往诺森德之前,不妨先来线上展厅,提前感受设计师画笔下的北地风貌吧!如何进 ...[详细]
    • 一个更简单的字节码增强框架,谁看了案例都会使用!

      一个更简单的字节码增强框架,谁看了案例都会使用!一个更简单的字节码增强框架,谁看了案例都会使用!作者:小傅哥 2023-02-28 09:06:38开发 架构 Byte Buddy 是一个代码生成和操作库,用于在 Java 应用程序运行时创建和修改 ...[详细]
    • 2016年虎嗅F&M创新节 4月22日成都之约

      2016年虎嗅F&M创新节 4月22日成都之约一场突出科技元素的创新创业嘉年华真实.犀利互动.趣味跨界.创新始于2013年,2016年,将在至少四个城市,与您一起,聆听大咖智识分享,结交满怀好奇心、对科技和创业充满热情的创新人群!为什么要赞助F& ...[详细]
    • 养殖贷款怎么申请?在网上查询的征信有什么区别?

      养殖贷款怎么申请?在网上查询的征信有什么区别?养殖贷款怎么申请?向提供养殖贷款的银行提交《养殖业贷款申请书》、本人的身份证件及相关资料即可申请。申请以后到获得贷款将经历以下流程:1、调查贷款银行将对借款人提交的资料及还款能力进行调查,并实地调查抵 ...[详细]
    • 瀑布屏加持 国产5G新机入网:骁龙865+44W快充

      瀑布屏加持 国产5G新机入网:骁龙865+44W快充瀑布屏,是去年展示的全新屏幕形态,两侧屏幕曲率近乎于90度,形成极佳的视觉冲击力,但由于成本原因,目前只有vivo NEX 3和华为Mate 30 Pro采用了这一形态。今天上午,我们在国家3C质量认 ...[详细]
    • 12月Android手机好评榜发布:5G手机优势凸显

      12月Android手机好评榜发布:5G手机优势凸显毫无疑问,2020年将是5G手机爆发的一年,从现在的发布节奏来看,4G手机可能用不了几年就会退出舞台,成为5G手机的主场。从上个月的Android手机好评榜中,我们得出5G手机逐渐成为用户所好,榜单前 ...[详细]
    • 盘点:Facebook这些年推出的“神功能”

      盘点:Facebook这些年推出的“神功能”每天在社交网络上都会晒出超过20亿张照片,视觉内容成为人们线上交流的重要部分,但是对于视觉有障碍的用户来说,图片恐怕是最糟糕的部分。康奈尔大学最近的一项研究表明,虽然盲人对于社交媒体上的视觉内容很感兴 ...[详细]
    • 教你新号激活京东金条 京东金条激活方法有哪些?

      教你新号激活京东金条 京东金条激活方法有哪些?京东是一个非常注重品质和送货速度的购物平台,为了满足用户的消费需求,京东也推出了京东白条、京东金条等服务,京东白条主要为用户购物时提供先消费后付款的支付服务,而京东金条就类似于支付宝借呗、微信微粒贷了 ...[详细]
    • 360手机F4高配版将首发 打通线下渠道的引爆点

      360手机F4高配版将首发 打通线下渠道的引爆点刚刚过完清明节假期,360手机就在4月5日召开了一次媒体沟通会。这次媒体沟通会主要说了3件事:首先是很多人拭目以待的360手机F4高配版将在后天也就是7日进行首发,第二件事是4月9日起360手机F4标 ...[详细]
    热点阅读