(转)B+树的理解

关于B树的一点理解 首先,需要强调的是B树对应的英文名字就是B-Tree(名字中的-其实是连字符),并没有一种B减树。 背景 目前有许多不同的技术可用来在计算机系统中提供存储能力。例如,硅制的存储芯片,速度比较快,但是却造价相对昂贵,且失电后存储内容丢失;磁存储技术造价相对比较低,失电后不会丢失存储内容,但是却速度慢。为了在容量,速度及成本三者上取得一个平衡,目前大多数的计算机都采用了多级存储体系。即使用硅制的存储芯... 阅读详情

大部分内容转自这篇博文https://www.jianshu.com/p/e5d86a0ba150和https://www.cnblogs.com/xueqiuqiu/articles/8779029.html

B树就是B-树。

Mysql用的是B+树

B树和B+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 
因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是B树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小

总结:每一磁盘页对应索引树的节点,意思是一磁盘页就是一个节点?

IO次数=树的高度,意思是IO3次即树的高度就是3层?

 

B树

概念:一棵m阶B树是一棵平衡的m路搜索树。
特点:

  • m即所有节点中孩子节点个数的最大值,且M>2;
  • 根结点的儿子数为[2, M];
  • 根结点和叶子结点中间的这部分节点的儿子数为[M/2, M],向上取整(就是除根结点以外的非叶子结点)
  • 非叶子结点的关键字个数=儿子数-1;
  • 所有叶子结点位于同一层

有关b树的一些特性,注意与后面的b+树区分:

  1. 关键字集合分布在整颗树中;
  2. 任何一个关键字出现且只出现在一个结点中;
  3. 搜索有可能在非叶子结点结束;
  4. 其搜索性能等价于在关键字全集内做一次二分查找;

B树查找性能是Log2N

B树的插入

例:用1,2,6,7,11,4,8,13,10,5,17,9,16,20,3,12,14,18,19,15构建5阶B树

因为构建5阶的B树,所以每个节点的关键字个数范围为[2,4]

插入11时,该节点的关键字个数超出范围,进行分裂

之后直接插入4,8,13

当插入10时,节点关键字个数再次超出范围

将子节点分裂

这样的过程循环,关键字个数超就往上顶,上面也超不够顶,就往下分裂

最后结果

查询

如图是一个3阶b树,顺便讲一下查询元素5的过程

1

第一次磁盘IO,把9所在节点读到内存,把目标数5和9比较,小,找小于9对应的节点;

2

2,第二次磁盘IO,还是读节点到内存,在内存中把5依次和2、6比较,定位到2、6中间区域对应的节点; 

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

可以看到,b树在查询时的比较次数并不比二叉树少,尤其是节点中的关键字非常多时,但是内存的比较速度非常快,耗时可以忽略,所以只要树的高度低,IO少,就可以提高查询性能,这是b树的优势之一。

 

二,b+树

b+树,是b树的一种变体,查询性能更好。m阶的b+树的特征:

  1. 非叶子结点中的子节点数跟关键字数是一样的(b树是关键字数比子节点数少1),这些关键字不保存数据,只用来索引,所有数据都保存在叶子节点(b树是每个关键字都保存数据)。
  2. 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  3. 所有的非叶子结点可以看成是索引部分,结点中仅包含其各子节点中的最大(或最小)关键字。
  4. 通常在b+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。
  5. 同一个数字会在不同节点中重复出现,根节点的最大元素就是b+树的最大元素。

之所以非叶子节点要存储各子节点的最大关键字或最小关键字,是因为方便在查询时,确定往哪个子节点查

这个图是仅包含其各子节点中的最大关键字。

6

这个图是仅包含其各子节点中的最小关键字。

b+树相比于b树的查询优势:

  1. b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”;
  2. b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);
  3. 对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历,如下两图:

这是B树的范围查找

7

这是B+树的查找

8

 

总结,之所以数据库要选B树或B+树,不选二叉树,目的是为了减少磁盘IO的次数,因为B树和B树结构是矮胖的。

而B+树因为非叶子节点都不存储数据,只存储索引,所以同样大小的磁盘页可以容纳更大的节点元素,这就意味着,数据量相同的情况下,B+树比B-树更加“矮胖”,因此查询时IO次数也更少。

 

 

 

 

 

 

 

 

B+树简单理解 前言 写这边文章主要是我查阅网上资料学习B+树的时候,发现文章都是那种教材风格。就是开头先说一大通原理,性质特点,但是看上去又非常地晦涩;接下来的算法方法实现又难以看懂。不知道是本人的水平不到还是作者的写作能力有待提升。在我苦心研究和实操下,终于理解了B+树的原理和实现,其实很好理解,真不明白网上的文章是怎么了。这里我想以一种简单的方式来阐述,希望以后忘记了也能快速回顾。 本文源码来于一个开放的工程,在最后。 B+树的重要概念 1.B+树由Node连接而成,每一个Node中最多具有M-1个Entry。(M为 阅读详情

相关推荐

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中,算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战,加之OpenAI带来的技术封锁,唯有坚定不移的发展自主可控的国产技术方案,持续壮大国产智算集群规模,才能一路突破围追堵截,进一步促进国产大模型产业生态繁荣。集群还提供了完善高效的软件栈工具,集成多种主流的深度学习编程框架,通过测试验证,确保了对行业领先人工智能模型的高效支持,做到开箱即用,用户可快速投入模型的开发和部署,加速了其在人工智能领域的布局和发展。方面取得了显著成效。

Ucloud_TShare的博客 1473

B树和B+树

一、B树和B+树的区别: B+树和B树相比,主要的不同点在以下3项: 所有关键码都存放在叶节点中,上层的非叶节点的关键码是其子树中最小(或最大)关键码的复写 叶节点包含了全部关键码及指向相应数据记录存放地址的指针,且叶节点本身按关键码从小到大顺序连接。如果按下层结点“最小关键码复写”原则,则树中每个非叶结点中有 m 棵子树必有 m - 1 个关键码;如果按下层结点“最大关键码复写”原则,则树...

weixin_39799208的博客 2万+

Shell数学计算(算术运算,加减乘除运算)

声明: 本篇博客的学习途径主要为以下网站和课堂讲解,发博客目的仅为学习使用,在该博客的基础上做了一定程序的简略和修改。 参考博客 : 原文链接:http://c.biancheng.net/shell/ Shell数学计算Shell数学计算数学计算命令对整数进行数学运算: (()) / let / $[] /exprShell (())Shell let命令bc命令:一款数学计算器在 Shell 中使用 bc 计算器 Shell数学计算 默认情况下,Shell 不会直接进行算术运算,而是把+两边的数据(数

AKUANer的博客 2万+

数据检索的优化之道:B树与B+树的深度解析与应用探索

在信息时代,数据检索的速度和效率对于任何依赖数据处理的系统来说都至关重要。无论是在线搜索引擎、数据库管理系统还是文件存储系统,快速准确地检索所需数据都是核心需求。传统的线性数据结构在处理大规模数据集时往往力不从心,因此,高效的索引结构成为了优化数据检索的关键。本文将深入探讨B树和B+树这两种数据结构,分析它们如何提升数据检索的性能,并探索它们在实际应用中的广泛作用。

蜗牛的博客 2385

电机传动机构的转矩与惯量折算

参考《工业运动控制》

庐州牧 1万+

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

B+树与B树的区别、Hash索引与B+树索引的区别

MySQL中B+ 树和 B 树的区别,B+树索引与Hash索引的区别

小小张自由—>张有博 3503

RTX 5090配Ubuntu 24.04踩坑记:手把手搞定OpenVLA-OFT环境(附版本避坑清单)

本文详细记录了在RTX 5090显卡和Ubuntu 24.04系统上部署OpenVLA-OFT环境的完整过程,包括驱动安装、CUDA配置、PyTorch版本选择等关键步骤。提供了经过验证的版本组合清单和常见错误解决方案,帮助开发者高效搭建AI开发环境。

weixin_30342209的博客 465

数据结构(54) B树、B+树

1、B树 1.1、B树的定义 B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树: 1)树中每个结点至多有m棵子树,即至多含有m-1个关键字。 2)若根节点不是终端结点,则至少有两棵子树。 3)除根节点外的所有非叶结点至少有棵子树,即至少含有个关键字。 4)所有非叶结点的结构如下: Ki(i = 1,2,...,n)代表关键字且满足K1<K2<...<Kn; Pi(i = 0,1,...,

李白 1万+

【声纳技术】声呐时间反转镜技术:从被动聚焦到主动空间复用

时间反转镜技术以其独特的物理机制,为水声通信与声呐探测提供了一条绕过传统自适应均衡器的新路径。被动时间反转利用接收端的空间分集实现脉冲压缩,结构简洁、计算高效;主动时间反转则通过发射端预编码,将多径能量引导至目标位置,为多用户下行链路的空间复用奠定了物理基础。从Kuperman等人在海洋中首次验证声学时间反转镜,到TR-MIMO声呐的湖试验证,再到VTRM-CRK多用户通信系统的海试成功,该技术已从理论概念逐步走向工程实用。

u012133341的博客 55

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景,在 Windows Presentation Foundation(WPF)开发中,依赖项属性是一个核心且强大的特性,它为构建灵活、可扩展的用户界面提供了关键支持。理解并熟练运用依赖项属性,对于开发高效、健壮的 WPF 应用程序至关重要。本文将深入探讨 WPF 依赖项属性,通过丰富的代码示例和对关键概念的详细解释,帮助读者全面掌握这一重要特性及其应用场景。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

算法导论读书笔记(18)B树

第五部分 高级数据结构第18章 B树 B树是为磁盘或其他直播存取的辅助存储设备而设计的一种平衡搜索树,它们在降低磁盘I/O操作数方面要更好一些。 B树的结点可以有很多孩子 1. B树的定义一棵B树T是具有以下性质的有根树(根为T.root) 1. 每个结点x有下面属性: a. x.n,当前存储在结点x中的关键字个数。 b. x.n个关键字本身x.key1, x.key2, …, x.keyx.

liujianli的博客 768

AI原生SaaS应用的自动化运维体系构建

随着ChatGPT掀起的AI原生应用浪潮,越来越多SaaS(软件即服务)产品开始以"AI优先"的方式设计——从用户交互到核心功能,都深度依赖机器学习模型(如推荐算法、智能客服)、实时数据流(如用户行为分析)和弹性算力(如大模型推理)。这类应用的运维需求与传统SaaS完全不同:传统运维像"修水管",哪里漏了补哪里;AI原生运维则像"照顾会成长的宠物",需要实时感知模型状态、数据变化和流量波动,主动调整资源。

AI天才研究院 1080

【转】深入理解B树和B+树(二)B+树的优点

有了B树,为什么还需要B+树呢?那就要先说下B树的缺点了,人类对于性能的追求是无止境的,B树相比二叉树虽好,但还是存在以下问题: 1.每个节点中既要存索引信息,又要存其对应的数据,如果数据很大,那么当树的体量很大时,每次读到内存中的树的信息就会不太够。 2.B树遍历整个树的过程和二叉树本质上是一样的,B树相对二叉树虽然提高了磁盘IO性能,但并没有解决遍历元素效率低下...

zs742946530的专栏 967

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【转】理解B+树算法和Innodb索引

分享一篇MySQL InnoDB B+树和索引的好文章....

Life is tragedy,Need you to struggle,to fighting.. 407

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(转)漫画理解B-树和B+树及B+树在MySQL数据库中的使用

https://blog.youkuaiyun.com/qq_26222859/article/details/80631121 http://www.sohu.com/a/154640931_478315

person_on_pyramid的博客 688

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

关于B树 B+树 B*树以及红黑树的理解

1、首先要明白为什么有了AVL树之后还会出现这么多树的变种? 可以参考这个知乎有关几种树的应用的回答: 作者:王伟豪 链接:https://www.zhihu.com/question/30527705/answer/52919336 来源:知乎 AVL树:平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树...

herr_kun的博客 3万+

理解 B 树、B+ 树特点及使用场景

B 树 B 树就是常说的“B 减树(B- 树)”,又名平衡多路(即不止两个子树)查找树,它和平衡二叉树的不同有这么几点: 平衡二叉树节点最多有两个子树,而 B 树每个节点可以有多个子树,M 阶 B 树表示该树每个节点最多有 M 个子树 平衡二叉树每个节点只有一个数据和两个指向孩子的指针,而 B 树每个中间节点有 k-1 个关键字(可以理解为数据)和 k 个子树( **k 介于阶数 M 和 ...

luzhensmart的专栏 1万+

MySQL 理解B树与B+树

MySQL 理解B树与B+树

26857259 1366

B树、B-树、B+树、B*树简介

B树 (二叉搜索树): 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结...

二十同学 7万+

B-树与B+树的理解总结

B-树与B+树

weixin_46307478的博客 2295

理解B树及B+树、B*树

B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。在实际使用中,B+的使用是最多的。MySQL是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。

冰果滴的博客 1427

B树、B-树、B+树、B*树都是什么

B树、B-树、B+树、B*树都是什么         今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片,这和磁盘碎片、内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了数据库运行的速度。如果发现索引中存在过多的存储碎片的话就要进行“碎片整理”了,最方便的“碎片整理”

史迪阳的博客 9737

B树、B+树理解

一.B树 1.含义:是一棵多路平衡查找树,当m等于2时就是平衡二叉树.需要指定它的阶数,即每个节点最多可以有多少个子节点,若m=2,即二叉平衡查找树. 2.每个节点都存储了相应的关键字key和value,将这一对键值对称为一个记录.当我们将其作为一种索引结构时,相应的value即为硬盘的逻辑地址.要知道在数据库中的索引技术都是采用的Bjia树. 3.规则:该节点的键值对必须满足小于等于m-1(m叉树),否则就要对其进行拆分 拆分规则是中间的提取到父节点,两边单独构成一个节点.尽量使高 度最小. 关键字都是按

weixin_44447309的博客 1063

讲一下对树,B+树的理解

B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树。B树类似于红黑树,但它们在降低磁盘I/O操作数方面要更好一些 B+树是B树的一种变形,它把所有的卫星数据都存储在叶节点中,内部节点只存放关键字和孩子指针,因此最大化了内部节点的分支因子,所以B+树的遍历也更加高效(B树需要以中序的方式遍历节点,而B+树只需把所有叶子节点串成链表就可以从头到尾遍历)。 以下先放一张我所依据的B+树的...

suncat的博客 1645
上一篇: (转)页、磁盘块与扇区
下一篇: ThreadLocal的弱引用
AAA821
博客等级 码龄14年 19粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值