B树、B+树

article/2025/9/8 23:55:07

B树与B+树的区别在于:

1)在B+树中,具有n个关键字的节点只含有n棵子树,即每个关键字对应一颗子树;而在B树中,具有n个关键字的节点有n+1棵子树
2)B+树:每个节点(非根节点)关键字个数【m/2】<=n<=m (根节点:1<=n<=m),
在B树:[m/2]-1<=n<=m-1(根节点:1<=n<=m-1)
3) 在B+树中,叶节点包含信息,所有非叶节点仅起到索引作用,非叶节点中的每个索引项只含有对应子树的最大关键字和指向孩子树的指针,不含有该关键字对应记录的存储地址。
4) 在B+树中,叶节点包含了全部关键字,即在非叶节点中出现的关键字也会出现在叶节点中。而在B树中,叶节点包含的关键字和其它节点包含的关键字是不重复的。

B+树有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了。
B+树支持range-query(区间查询)非常方便,而B树不支持。这是数据库选用B+树的最主要原因。
通常在B+树中,有两个头指针,一个指向根节点,另一个指向关键字最小的叶节点。因此,B+树可以进行两种查找:一种是从最小关键字开始的顺序查找,另一种是从根节点开始,进行多路查找。

B树,又称为多路平衡查找树,B树中所有节点的孩子节点数的最大值称为B树的阶,通常用m表示,一颗m阶B树或为空树,或为满足如下特性的m叉树:

1)书中每个节点之多有m棵子树(即至多含有m-1个关键字)
2)若根节点不是终端节点,则至少有两颗子树,(至少含有一个关键字)
3)除根节点外的所有非叶节点至少有取上界【m/2】棵子树(即至少含有【m/2】-1个关键字)
4)n为关键字的个数,则【m/2】-1<=n<=m-1

P0K0P1K1P2K2P3
K为关键字,指向子节点的指针。 5)所有叶节点都出现在同一层次上,并且不带信息(可以看做是外部节点或者类似于折半查找判定数的查找失败节点,实际上这些节点并不存在,指向这些节点的指针为空。)

在这里插入图片描述
1、B树的高度
1)一棵树包含n个关键字、高度为h、阶数为m的B树:
因为B树种每个节点最多有m-1个关键字,所以在一颗高度为h的m阶B树种关键字的个数应该满足:
n<=(m-1)*(1+m+m^2 +h-1))=m^h-1
h>=logm(n+1)
2)若让每个节点中的关键字个数达到最少,则容纳同样多关键字的B树的高度可到达最大,由B树定义:第一层至少有1个节点,第二层至少有2个节点,除根节点以外的每个非终端几点至少有【m/2】棵子树,则第三层至少有2【m/2】个节点。。。。第h+1层至少有2(【m/2】)(h-1)个节点,注意到第h+1层是不包含任何信息的叶节点。对关键字个数为n的B数,叶节点即查找不成功的节点为n+1,由此n+1>=2([m/2])(h-1),即h<=logm/2+1

2、B树的查找

在B树上进行查找与二叉查找树很相似,只是每个节点都是多个节点关键字的有序表,在每个节点上所做的不是两路分支决定,而是根据该节点的子树所做的多路分支决定。
B树查找包含两个基本操作:1)在B树中找节点2)在结点内找关键字。由于B树常存储在磁盘上,则前一个查找操作是在磁盘上进行的,而后一个查找操作是在内存中进行的,即在找到目标节点后,先将节点中的信息读入内存,然后在采用顺序表查找法或折半查找法查找等于K的关键字。
3、B插入
1)定位:利用前述的B树查找算法,找出插入该关键字的最底层中某个非叶节点(注意,B树中的插入关键字一定是插入在最底层中某个非叶节点内)
2)插入:在B树中,每个非失败节点的关键字个数都在【[m/2]-1,m-1】之间,当插入后的节点关键字个数小于m,则可以直接插入;插入后检查被插入节点内关键字的个数,当插入后的节点关键字个数大于m-1时,则必须对节点进行分裂。
分裂的方法:取一个新节点,将插入key后的元原来从中间位置将其中的关键字分为两部分,左部分包含的关键字放在原节点中,有部分包含的关键字放到新节点中,中间位置【m/2】的节点插入到原节点的父节点中。若此时导致其父节点的关键字个数也超过了上限,则继续进行这种分裂操作,直至这个过程传到根节点为止,这样导致B树高度增1.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、B树的删除
B树的删除和插入类似,需要涉及到合并问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

B+树基本概念

B+树是应数据库所需而出现的一种B树的变形树。
一颗m阶B+树需要满足下列条件:
1)每个分支节点最多有m棵子树(子节点)
2)非叶根节点至少有两颗子树,其他每个分支节点至少有【m/2】棵子树
3)节点的子树个数与关键字个数相等
4)所有叶节点包含全部关键字及指向相应记录的指针,而且业绩点中将关键字按大小顺序排列,并且相邻叶节点按大小顺序互相连接起来。
5)所有分支节点中仅包含它的各个子节点中关键字的最大值以及指向其子节点的指针。

插入:
1)若为空树,创建一个叶子结点,然后将记录插入其中,此时这个叶子结点也是根结点,插入操作结束。

2)针对叶子类型结点:根据key值找到叶子结点,向这个叶子结点插入记录。插入后,若当前结点key的个数小于等于m-1,则插入结束。否则将这个叶子结点分裂成左右两个叶子结点,左叶子结点包含前m/2个记录,右结点包含剩下的记录,将第m/2+1个记录的key进位到父结点中(父结点一定是索引类型结点),进位到父结点的key左孩子指针向左结点,右孩子指针向右结点。将当前结点的指针指向父结点,然后执行第3步。

3)针对索引类型结点:若当前结点key的个数小于等于m-1,则插入结束。否则,将这个索引类型结点分裂成两个索引结点,左索引结点包含前(m-1)/2个key,右结点包含m-(m-1)/2个key,将第m/2个key进位到父结点中,进位到父结点的key左孩子指向左结点, 进位到父结点的key右孩子指向右结点。将当前结点的指针指向父结点,然后重复第3步。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B+树的删除操作

如果叶子结点中没有相应的key,则删除失败。否则执行下面的步骤

1)删除叶子结点中对应的key。删除后若结点的key的个数大于等于Math.ceil(m-1)/2 – 1,删除操作结束,否则执行第2步。

2)若兄弟结点key有富余(大于Math.ceil(m-1)/2 – 1),向兄弟结点借一个记录,同时用借到的key替换父结(指当前结点和兄弟结点共同的父结点)点中的key,删除结束。否则执行第3步。

3)若兄弟结点中没有富余的key,则当前结点和兄弟结点合并成一个新的叶子结点,并删除父结点中的key(父结点中的这个key两边的孩子指针就变成了一个指针,正好指向这个新的叶子结点),将当前结点指向父结点(必为索引结点),执行第4步(第4步以后的操作和B树就完全一样了,主要是为了更新索引结点)。

4)若索引结点的key的个数大于等于Math.ceil(m-1)/2 – 1,则删除操作结束。否则执行第5步

5)若兄弟结点有富余,父结点key下移,兄弟结点key上移,删除结束。否则执行第6步

6)当前结点和兄弟结点及父结点下移key合并成一个新的结点。将当前结点指向父结点,重复第4步。

注意,通过B+树的删除操作后,索引结点中存在的key,不一定在叶子结点中存在对应的记录。

下面是一颗5阶B树的删除过程,5阶B数的结点最少2个key,最多4个key。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/C42k9W6w.shtml

相关文章

红黑树、b+树、b树、mysql索引详细剖析

文章目录 树基础知识回顾红黑树b树、b树为什么不能使用二叉树来存储数据库索引B/B树的索引数量 索引什么是聚簇&#xff08;集&#xff09;索引&#xff1f;mysql聚簇和非聚簇索引的区别b树和哈希索引二级索引二级索引存储主键值而不是存储行指针的优点与缺点 树基础知识回顾 …

B树

B树的定义 flyfish 2015-7-15 B-树即为B树。因为B树的原英文名称为B-tree&#xff0c;因为翻译的不统一所以B树和B-树都是B-tree。 B树定义 引用自严蔚敏《数据结构》&#xff08;C语言版&#xff09; B树是一种平衡的多路查找树 定义&#xff1a;一棵m 阶的B树&#xff0…

B树详解

B树 B树&#xff0c;一般都被叫做B-树。 定义 B树中的每个节点的元素和子树数量是有限的&#xff0c;除了根节点外&#xff0c;所有节点最多拥有M-1个元素&#xff0c;所有非叶子非根节点最多拥有M个子树,即为M阶树。根节点至少拥有两个子树&#xff0c;除了根节点之后的非叶…

MySQL索引底层实现原理(B树和B+树)

文章目录 一、B-树索引1. 理论部分2. B树黄色的data表示key索引所在的这一行的数据&#xff0c;data存储的是数据本身内容&#xff0c;还是数据在磁盘上的地址&#xff1f;关于操作系统从磁盘读取索引文件到内存中的几个问题B树的缺点 三、B树B树特点MySQL最终为什么要采用B树存…

B树概念和插入实现

目录 前言 一.B树概念 1.1 概念和性质 1.2 分裂 二.插入的实现 三.性能分析 四.B树的删除 五.B树的优化B树和B*树 5.1 B树 5.2 B*树 六.B树的应用 6.1 MyISAM中的索引 6.2 Innodb引擎 前言 之前我们学了有很多数据结构&#xff0c;比如顺序表&#xff0c;链表&#xff0c;…

MySQL索引(B树、B+树)

目录 简介索引结构&#xff08;树&#xff09;为什么用树&#xff0c;而不用哈希表BTree索引BTree索引聚簇索引与非聚簇索引 索引分类性能分析索引创建场景 简介 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。可…

MySQL B+树相对于B树的区别及优势:

部分参考&#xff1a;B树和B树的区别 MySQL为什么使用树结构&#xff1f; 文件很大&#xff0c;不可能全部存储在内存中&#xff0c;故要存储到磁盘上索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数&#xff08;为什么使用B-/Tree&#xff0c;还跟磁盘存取原理有关&am…

B树索引

B-Tree索引是最常见的索引结构&#xff0c;如oracle和mongodb的索引都是B-Tree&#xff0c;而mysql的索引类型是BTree 一、B树索引的结构 B-树索引是基于二叉树结构的。B-树索引结构有3个基本组成部分&#xff1a;根节点、分支节点和叶子节点。其中根节点位于索引结构的最顶端…

什么是B树

1.什么是B树 B树又称为多路平衡查找树&#xff0c;B树中所有结点的孩子节点数的最大值称为B树的阶&#xff0c;通常用m表示。 2.B树的特性 一颗m阶B树或为空树&#xff0c;或为满足如下特性的m叉树&#xff1a; 1&#xff09;树中每个结点至多有M棵子树&#xff08;即至多含有…

图解B树构建过程

1.B树结构同时满足以下特性 每个节点最多包含n个孩子&#xff0c;即n叉树&#xff1b;除了根节点和叶子节点外&#xff0c;每个节点至少有ceil(n/2)个孩子&#xff08;ceil是向上取整&#xff09;&#xff1b;若根节点不是叶子节点&#xff0c;则至少有两个孩子&#xff1b;所…

了解B树的删除

文章目录 1. 删除操作第一种情况第二种情况第三种情况 2. C示例3. 删除复杂度参考文档 在本教程中&#xff0c;您将学习如何从B树中删除键。此外&#xff0c;您还可以找到C语言的示例。     删除B树上的元素包括三个主要事件&#xff1a;搜索要删除的键所在的节点、删除键和…

B树的插入、删除操作

一、简介 B树是什么&#xff1f; 1970年&#xff0c;R.Bayer和E.mccreight提出了一种适用于外查找的树&#xff0c;它是一种平衡的多叉树&#xff0c;称为B树&#xff08;或B-树、B_树&#xff09;。 一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树…

数据结构-B树删除示例

数据结构学习-B树删除示例 1、B树简介2、在线可视化生成B树工具3、B树删除规则4、B树删除示例4.1、删除非根结点示例4.2、删除根结点示例 1、B树简介 1970年&#xff0c;R.Bayer和E.mccreight提出了一种适用于外查找的树&#xff0c;它是一种平衡的多叉树&#xff0c;称为B树&a…

B树-多路平衡查找树

B树 B树一个m阶B树的具有的特征&#xff08;或必须满足的条件&#xff09;B树的查找B树插入元素(一定是在叶子节点插入)1.插入后&#xff0c;没有破坏B树的规则2.插入后&#xff0c;叶子节点元素超过m-1个 B树删除元素1.删除叶子节点上的元素&#xff0c;没有破坏规则2.删除叶子…

B树、B+树详解

B-树&#xff0c;即为B树。因为B树的原英文名称为B-tree&#xff0c;目前理解B的意思为平衡。 概念 首先&#xff0c;B树不要和二叉树混淆&#xff0c;在计算机科学中&#xff0c;B树是一种自平衡树数据结构&#xff0c;它维护有序数据并允许以对数时间进行搜索&#xff0c;顺…

【B树及B树的基本操作】

文章目录 1.B树的定义和特性2.B树的性质3.B树创建的过程。4.B树的删除5.总结 1.B树的定义和特性 B树是一种平衡的多路查找树。 一棵m阶的B树&#xff08;B树中所有结点的孩子个数的最大值为m)&#xff0c;或为空树&#xff0c;或为满足下列特性的m叉树&#xff1a; (1) 树中每…

B树和B+树的区别

文章目录 简述写在前面1、B树2、B树 深入浅出B树B树深入B-树的查找 B 树B树概述 B-树和B树的区别拓展&#xff1a;MySQL为什么使用B-Tree&#xff08;BTree&#xff09;&& 存储知识存储数据最小单元主存存取原理磁盘存取原理 总结 简述 写在前面 大家在面试的时候&am…

B树(B-树)详解

B-树&#xff0c;即为B树。因为B树的原英文名称为B-tree&#xff0c;而国内很多人喜欢把B-tree译作B-树&#xff0c;B-tree就是指的B树。 B-树容易让人误解,建议大家用B树称呼, 本文以下直称B树 这篇介绍概念, 优点应用等, B树的描述和增删改查请到隔壁我写的另一篇(篇幅较长…

数据结构 —— B树

文章目录 1、B树的定义1.1、B树的特性1.2、B树的高度1.3、性能分析1.4、B树的补充说明1.5 、B树、B-树 、B-tree、B tree的区别 2、B树的插入操作以5阶B树为例&#xff0c;介绍B树的插入操作&#xff0c; 3、 B树的删除操作以5阶B树为例&#xff0c;介绍B树的删除操作 4、B树相…

B树和B+树详解

B树、B树看这一篇就够了 [TOC](B树、B树看这一篇就够了) 引言B树什么是B树以及B树是怎么来的B树的基本性质B树的新增和删除B树的插入B树的删除 B树什么是B树以及为什么要有B树B树的基本性质B树的查找 B树与B树的比较B树的优势B树的优势两者的细节对比 B树与B树在实际代码中的应…