B+树完全解析

图解:什么是 B+树?(汇总篇) 基本概念为了实现动态多层索引,通常采用 B-树 和 B+树。但是,用于索引的 B-树 存在缺陷,它的所有中间结点均存储的是数据指针(指向包含键值的磁盘文件块的指针),与该键值一起存储在B... 阅读详情
AI摘要

本文深入讲解B+树的结构特点,包括结点组成、合法性的判断标准及其在查找、插入和删除操作中的应用。

一、B+树的结点组成

B+树包含两种结点:

0、根结点:(一般区分为两种,这里我将根结点分开说明,因为根节点非常特殊而且唯一)

      若树只有一层:仅有根结点,此根结点也是叶结点,根结点中索引值个数无最少限制。

      若树为两层以及以上:最上面那一层为根结点,根结点属于内部结点,根节点中指针最少为2个。

1、叶结点:叶节点在B+树的最底层(所有叶节点都在一层),叶结点中存放索引值、指向记录的指针、指向下一个叶结点的指针。叶结点内的索引值是记录中键的拷贝,这些索引值以排好序的形式,从左到右分布在叶节点中。

2、内部结点:所有非叶结点都属于内部结点,所有内部结点上的索引值都是叶结点的副本。内部结点中存放索引值、指向某一个结点(可以是叶结点也可以是内部节点)的指针。

这两种节点的构成直观图如下:    (可以看到两者的存储空间是一样的)



二、B+树的结构,结点的合法性

B+树必然是平衡的,从树根到树叶的所有路径都是等长的。

不同格式的B+树的区别仅有唯一参数n,n为树中所有结点(无论叶结点还是内部结点)包含的指针数目。

在上图中我们可以看出,n为4。

一旦n确定下来,在整个操作过程中都不会变,在整个操作过程中,任何结点的占用空间均为:

n-1个索引值空间 + n个指针空间

事实上,在文件系统中,每个物理块都代表一个结点(可能有未被利用的空间,但要保证能放下一个结点,且n尽可能大)


在树高度大于等于2层时,若结点是合法的,则有如下:

0.对于根节点:存放指针的空间只需 >= 2 即可。

1.对于内部结点:存放指针空间的装满量必须 >= 一半,在上图中,n=4因此必须存放2~4个指针才算合法。

2.对于叶结点:存放指向记录的指针的装满量必须 >= 一半。注意!存放记录的指针量是n-1,有1个是指向下一个叶结点的指针,因此当n=4时,存放记录的指针个数为2或3时都是合法的。

3.叶节点每一个索引值对应一个记录指针。内部结点每一个索引值划分两个区间,并把区间对应到指针上,因此若内部结点有a个索引,指针需要a+1个。

4.索引值不重复(这里不讨论索引值重复的变体)

对于高度仅为1的树,没有上述要求(因为最开始单个节点中肯定没有东西)


一颗棵合法的B+树可能有如下形状:



三、B+树的查找

从根结点开始,首先从结点内部查找(由于结点内部是升序的,二分查找即可)

比如查找4,结点内部存放1,5,8,3 那么查到5就可以停了,沿着对应的5左边的指针(区间1<=x<5)继续向下查找

直到最后进入叶节点。

若叶节点中存在该索引值,就能找到对应记录的指针,若不存在,则查找失败


四、B+树的插入

B+树插入流程图:


经过(1)的插入:


经过(1)、(2)的插入:


经过(1)、(2)、(3)的插入:



五、B+树删除

相比插入,删除过程更为复杂:


经过(1)删除:


经过(1)、(2)删除:


经过(1)、(2)、(3)删除:


经过(1)、(2)、(3)、(4)删除:


经过(1)、(2)、(3)、(4)、(5)删除:



例题:

Given the following 2-gram search keys:

(A,5), (D,3), (D,7), (H,5), (K,1), (N,1), (P,2), (Q,3), (X,1), (X,2)

Please construct a B+ tree, which each node can hold 4 pointers and 3 search keys.

(1) How many search key can a root node, a non-root & non-leaf node, or a leaf node at least hold ? How many times of splitting during the construction of the B+ tree?

(2) Please give the B+ tree after deleting (N,1) and (P,2).

(3) Please describe the process of searching keys that are greater than (D,8), and not equals to (H,8).

例题解答:

此题涉及的就是B+树的结构以及操作。

(1) 问:B+树种一个结点能容纳4个指针和3个索引值(查找键),分别说出根、叶、非根非叶的结点至少有多少索引值,在上述序列插入过程中,会分裂多少次。

 

(2) 问:给出删除N1和P2后的树。

(3) 问:描述查找大于D8小于H8索引值的过程。



一文读懂进阶的树结构——B+树 B+树 上节我们简单了解了B-树的特性和使用,这节我们来学习B-树的变形结构——B+树 阅读详情

相关推荐

MySQL中的B+树索引(聚簇索引/聚集索引、辅助索引/二级索引、联合索引/复合索引、覆盖索引、回表)详解

聚集索引/聚簇索引--主键 所有的数据辅助索引/二级索引--索引列—+主键。查看其他列–>回表(聚集索引/聚簇索引联合索引/复合索引--(多个列+主键)->覆盖索引(不是索引)

yqqの博客 3075

数据结构——B+树

B+树

weixin_52821814的博客 3万+

b-k-d树 原理 图文解析

背景 前文介绍了 k-d树 和 k-d-b树 今天再来这个b-k-d树已经几乎没啥可以参考的资料了 只能硬啃两篇文章了 一个是:medium 一个是发明者的论文 挺好的,人还是要耐着性子读一些难啃的东西 开始介绍 关键点 这个b-k-d树是基于k-d-b树再做的改进,整体的结构是个森林。。(多个k-d-b树) 前文介绍,k-d-b树在做静态查询的时候效果特别好,但是动态插入就不好了。 为了解决这种问题,作者研究了这种炸天的算法,用一个森林来做。。 仔仔细细地看插入算法: 在内存中有一个完全二叉树作为bu

stevewong的专栏 3443

经典树结构——B+树的原理及实现

文章目录B+树的概念B+树实现B+树节点参数B+树插入实现B+树删除实现 B+树的概念 规则: B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加 B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数都一样 B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针 非叶子节点的子节点数=关键字数(来源百度百科)(Mysql 的B+树) B+树相比

c630843901的博客 5万+

算法——B树,B-树,B+树,B*树全面解析笔记

算法——B树,B-树,B+树,B*树全面解析笔记 https://zhuanlan.zhihu.com/p/54102723 https://www.cnblogs.com/lianzhilei/p/11250589.html B树 = B-树 B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树,目前理解B的意思为平衡 B树的出现

轮回浮华三千的博客 1518

数字通信:信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码

在通信系统中,信息的传输通常需要经过一系列的处理步骤,确保数据可以在信道中高效且可靠地传输。以下是信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码的具体含义及其常见技术的解释。

weixin_44012667的博客 4810

二叉树、自平衡二叉查找树、B树梳理

几种常用的树 1 二叉树 称为二叉树(Binary Tree) 1.1 满二叉树 一棵深度为k,且有2k-1个结点的二叉树,称为满二叉树。 1.2 完全二叉树 除最后一层外,若其余层都是满的,并且最后一层最少又一个叶子节点,节点数为2k-1到2k-1。 1.3 平衡二叉树 左右树高度差不超过1,左右子树也是平衡二叉树。 2 二叉查找树 也称为二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 (1)若左子树不空,则左子树上所有结点的值均

日日留心的技术专栏 1545

大华/华睿工业相机(摄像头)链接电脑,并用OpenCV打开

睿科是大华旗下机器视觉子公司,现在工业相机一般是华睿在产,要下载驱动程序,要到华睿官网哪里下载。由于我的电脑没有摄像头,所以摄像头序列化为0,电脑的第一个摄像头默认为0,序列号是0,1,2,3……,你是什么接口连接的就选择什么, 建议直接全选。我这里选择第二个,下载后点击安装,的你要点击识别右侧设置,设置。这个过程很简单,故不赘述。打开你的设备会在右边显示。

qq_48050838的博客 1万+

MySQL索引原理分析(为什么使用B+树)

为什么哈希表、完全平衡二叉树、B树、B+树都可以优化查询,为何Mysql独独喜欢B+树? 1、哈希表有什么特点? 假如有这么一张表(表名:sanguo): 现在对name字段建立哈希索引: 注意字段值所对应的数组下标是哈希算法随机算出来的,所以可能出现哈希冲突。那么对于这样一个索引结构,现在来执行下面的sql语句: select * from sanguo where name='周瑜'; ...

夏季版 1284

S32DS3.5图形化配置实战:从零构建S32K144通信接口工程

本文详细介绍了如何使用S32DS3.5图形化配置工具从零构建S32K144通信接口工程。通过实战演示引脚配置、时钟树设置、SPI接口搭建等关键步骤,帮助开发者快速掌握NXP S32K系列开发技巧,提升嵌入式开发效率。特别针对S32DS3.5版本的新特性进行了深度解析,包括智能代码生成和调试优化方法。

weixin_26834815的博客 200

pentaho-kettle依赖拉取失败?试试这个Maven仓库配置的终极解决方案

本文详细解析了Pentaho Kettle依赖拉取失败的常见原因,并提供了三种Maven仓库配置方案,包括基础pom.xml配置、全局settings.xml设置以及企业级私有镜像仓库搭建。通过实战验证的方法和常见问题排查指南,帮助开发者彻底解决pentaho-kettle依赖问题,提升项目构建效率。

weixin_30275415的博客 203

B树和B+树

B 树 和 B+ 树

un357951的博客 701

ANPC三电平拓扑:两种调制方式解析

ANPC结构是基于“I”型NPC结构(下面讲NPC如不特殊说明,均指的是“I”型结构NPC)发展出来的一种改进型。我们在讲NPC结构的时候会谈到他的一个缺点就是损耗分布不均匀,会导致温升不均衡,进而限制模块的功率输出能力。而ANPC结构由于多了两个开关管以及相应的两个中性点换流回路(如下图),可以更加灵活任意的配置开关管可以使损耗没有那么的不均衡,从而能一定程度上提高模块的输出功率。ANPC拓扑结构图以及增加的环流回路。

IOTBOT的博客 9483

MySQL为啥用B+树作为数据的存储结构的连环炮

问:数据库中最常见的慢查询优化方式是什么? 同学A:加索引。 问:为什么加索引能优化慢查询? 同学A:...不知道同学B:因为索引其实就是一种优化查询的数据结构,比如Mysql中的索引是用B+树实现的,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,所以能优化查询。 问:你知道哪些数据结构可以提高查询速度? 同学B:哈希表、完全平衡二叉树、B树、B+树等等。 问:...

悟鸣的技术博客 1307

OGRE 3D----2. QGRE + QQuickView

将 OGRE(面向对象图形渲染引擎)集成到使用 QQuickView 的 Qt Quick 应用程序中,可以在现代灵活的 UI 框架中提供强大的 3D 渲染功能。本文将指导您如何在 QQuickView 环境中设置 OGRE。

charce_you的专栏 914

3.1 快速启动Flink集群

在本实战中,我们将快速启动Apache Flink 1.13.0集群,并在Hadoop集群环境中提交作业。首先,我们会在本地下载Flink安装包并上传至云主机,解压并配置环境变量。接着,我们将启动Flink集群,通过访问Web UI进行监控管理。然后,我们会配置集群,将Flink分发到从节点,并在集群上提交作业。最后,我们将通过命令行提交作业,并在Web UI上查看任务节点的输出结果。这个过程涵盖了Flink集群的部署、配置和作业提交,为大数据处理提供了一个完整的实战经验。

howard2005的专栏 727

数据结构 B树,B+树,红黑树

B树 百度定义:Balance tree of order,是一颗平衡的m路搜索树,查找次数和比较次数是log(N)级别,它或者是空树或者满足下列性质的树: 若m阶树 1,根节点至少有两个子节点,【2,m】 2,除根和叶子节点的节点的子节点个数【ceil(m/2),m】, 3,每个非根节点的节点包含的关键字个数为(取上)【ceil(m/2)-1,m-1】个,以升序排列 4,非叶子节点的关键字个数=...

左手哑铃右手敲代码的於川川 442

电磁场仿真软件:CST Studio Suite_(25).案例分析与实践

在电磁场仿真中,材料属性的设置至关重要。通过API,您可以轻松地设置和修改材料属性,以适应不同的仿真需求。通过以上案例分析和实践,您已经学会了如何在CST Studio Suite中进行二次开发。自动化仿真流程:批量创建和运行仿真项目、优化设计参数、生成报告。自定义仿真设置:设置材料属性、边界条件和激励源。数据处理与分析:读取仿真结果、数据可视化和数据导出。高级脚本开发:多线程仿真、集成机器学习和云仿真。这些技能将帮助您更高效地进行电磁场仿真,提高设计质量和工作效率。

kkchenjj的博客 1387

树概念及btree、b+tree

文章小结树概念B-tree 和 B+treeB+tree优点 树概念 1、树的特性 1)一棵树中的任意两个结点有且仅有唯一的一条路径连通; 2)一棵树如果有n个结点,则它一定有n−1条边; 3)在一棵树中加一条边将会构成一个回路。 2、二叉树 1)二叉树是一种特殊的树,二叉树的特点是每个结点最多有两个儿子。 2)二叉树使用范围最广,一颗多叉树也可以转化为二叉树。 3、满二叉树 1)二叉树中每个内部...

冷小陌的博客 445

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数据结构之树结构概述(含满二叉树、完全二叉树、平衡二叉树、二叉搜索树、红黑树、B-树、B+树、B*树)...

1. 树结构示意图 补充: 兄弟节点:具有相同父节点的节点互称为兄弟节点。 树的深度:从根节点开始(其深度为0)自顶向下逐层累加的。上图中,3的深度是1,6的深度是2,10的深度是3。 节点高度:从叶子节点开始(其高度为0)自底向上逐层累加的。6的高度是1,根节点1的高度是3。 2. 二叉树(Binary Tree) 任何一个节点的子节点数量不超过2(子节点分为左节点与右节点)。 2...

weixin_34273479的博客 341

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

树

1、树的基本概念 深度:计算一个节点的深度,从根节点算起(记住从1开始计数),到该节点所经过的节点数。 高度:计算一个节点的高度,从叶子节点算起(记住从1开始计数),到该节点所经过的节点数。 节点的度:树的度是如下定义的:有根树T中,结点x的子女数目称为x的度。也就是:在树中,结点有几个分叉,度就是几。 一个有用的小公式:树中结点数 = 总分叉数 +1。(这里的分叉数就是所有结点的度之和)...

u012133048的博客 3078

(一)树(树、二叉树、满二叉树、完全二叉树、二叉搜索树、二叉平衡树、B-Tree、B+Tree)

树(树、二叉树、满二叉树、完全二叉树、二叉搜索树、B-Tree、B+Tree)1.树1.概念2.相关术语 1.树 1.概念 树结构简单来说,就是数据元素之间具有层次关系的非线性结构。它是从自然界中的树抽象而来的,有树根、从树根发源类似枝杈的分支关系以及作为分支重点的叶子等。下面我们给出树结构的完整定义: 树(tree)是由n(n ≥0)个节点组成的有限集合。n=0的树称为空树;n >0 的树T的特点如下: 有一个特殊的节点称为根节点(root),它只有直接后继节点,没有直接前驱节点。 当n ≥1时,

泗水长流的博客 492

树结构完全指南:从二叉树、递归遍历到B+树与哈夫曼树

在计算机科学中,数据结构是组织与存储数据的基石,而树结构正是处理层级关系与一对多关系最自然的模型。从文件系统目录到编译器语法分析,从数据库索引到路由表匹配,树的身影无处不在。树由根结点与若干互不相交的子树递归定义,这种递归特性催生了二叉树、平衡树、B树、哈夫曼树等众多变体。二叉树通过左右子树有序性简化操作,其前序、中序、后序与层序遍历均能借助递归或队列高效实现。深入了解树的存储方式、遍历算法及各类平衡机制,不仅能筑牢算法基础,更能直接服务于数据库索引优化、数据压缩与搜索补全等工程场景。系统梳理树的核心概念、

weixin_32667955的博客 150

B树和B+树的插入、删除图文详解

1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)-1个关键字。 4)每个结点中的关...

eagle89的专栏 330

B树、B-树、B+树、B*树介绍

B树、B-树、B+树、B*树之间的关系B树B+树B*树 B树 B-树就是B树(可能有部分人会习惯上把B-树读为B减树,其实并不存在B减树,只是读法上的不同而已),B就是balanced,平衡的意思。B-树就是指的B树,特此说明一下。 先介绍一下二叉搜索树。 顾名思义,二叉搜索树,即指最多拥有两个叉,这里的叉即为所有非叶子结点的儿子(Lift和Right); 所有的结点存储一个关键字; 非叶子结点...

A_zhangq的博客 2万+

B树与B+树解析

B树(B-Tree)是一种自平衡的多路搜索树,专门为减少磁盘I/O而设计。它的名字中的"B"可能代表"Balanced"(平衡)或发明者"Bayer"。B+树是B树的一种变形,是数据库索引最常用的数据结构。它在B树的基础上进行了重要优化。

m0_74062279的博客 1134
上一篇: 关系数据库设计理论
下一篇: git操作-windows
Calcular
博客等级 码龄11年 143粉丝 71原创
评论 29
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值