B/B+树

探索B树/B+树与MySQL数据库索引的关系 本文主要讲述主轴线: 由搜索/查找联系到数据结构(搜索树,红黑书,B/B+树); 进行B/B+/RBtree的性能分析; 讲述一些关于数据从内存以及磁盘读取数据的数据存储管理的内容; 对数据库引擎MyISAM和InnoDB的分析; 前言:目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构,最近学习了数据结构树这一部分的内容,又阅读了前辈们关于这一话题的的总结后,斗胆运用 阅读详情

B/B+树

在之前的数据库索引的文章里面,提到了一个数据结构,B树和B+树,这两天看面试题的时候,发现B树,B+树,红黑树很常见,所以就查了一下

本文内容
  1. B树
  2. B+树
B树

B树,有些地方也写成B-tree(B-树),可不是读作“B减树”,中间的横杠是连接符,B-树就是B树

在数据库索引里面讲了,索引的数据结构就是B/B+树,而B+树可以说是B树的一个升级,所以先得介绍清楚B树

我们都知道,树结构做查询操作是很快的,效率很高,而且有序,最基础的就是二叉查找树,我们来对比着说,先来一个二叉查找树
在这里插入图片描述
那么我们现在要查找9这个元素,步骤是8–>12–>10–>9,假设这棵树就是数据库的索引,索引存储在磁盘上,那么我们就需要进行四次IO操作才可以找到我们需要的数据,这里就可以发现,在最坏的情况下,我们需要的IO操作的次数就是这棵树的高度,所以,在大量数据的情况下,这个树会变得很“高”,为了方便查询的快,我们要把这个树变“矮”,这就是B树的特征之一

一个m阶的B树具有如下特征:

  1. 根结点至少有两个子女。
  2. 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
  3. 每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
  4. 所有的叶子结点都位于同一层。
  5. 每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

下面来把上面那棵树转换成B树
在这里插入图片描述
按照上面的规则检验,根结点有两个孩子,m=3,1<=k<=3,所以中间节点包含三个孩子,自己有两个元素,每个叶子节点都包含一到两个元素,所有叶子节点都在第三层,节点中的元素从小到大排列,1满足小于2,3和4都满足大于2小于5,6和7都满足大于5,右边的同理,所以这是一个B树

对比二叉查找树来说,同样的元素,同样最坏的情况也是IO操作次数是树的高度,但是B树比二叉查找树要“矮”的多,对应的IO操作也会少的多,所以查询效率也会高得多

下面说一下B树的增加和删除操作
在这里插入图片描述
假设我们要把4这个元素插入到这个树,本来应该放在3和5的中间,但是该节点已经有两个元素,所以往上看父节点,父节点也是两个元素,再往上看,根结点只有一个元素8,所以把4插到根结点,然后调整这棵树,就变成了这样
在这里插入图片描述
可以看到,由于数据的插入,导致了一些节点的拆分,看起来很麻烦,但是也让B树能够维持多路平衡,这也是B树的特点之一,自平衡

现在在这个基础上,删除15这个元素,这时候(11,14)这个节点孩子少了一个,不符合B树的规范,所以需要进行调整,就变成了
在这里插入图片描述
这个过程叫做“左旋”,这个在下一篇博客写红黑树的时候再说

这个增加和删除操作可能有点绕,变换规则就是围绕上面说的那五点特征,所以没看懂的自己拿笔画两下

B树主要用于文件系统以及部分数据库索引,比如MongoDB,所以还是蛮重要的一个数据结构

B+树

B+树是B树的一个升级,比B树有更高的查询效率,先来说一下B+树的特点,B+树除了有B树的特点,还具有以下特点

一个m阶的B+树具有如下特征:

  1. 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
  2. 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  3. 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

文字居多,可能不容易理解,那就直接把上面的二叉查找树转换成B+树来解释
在这里插入图片描述
来一点一点解释,这是一个三阶的B+树,所以m=3,1<=k<=3,所以叶子节点的元素个数不超过两个,在B+树中的中间节点是有几个孩子就有几个元素,所以有三个孩子有三个元素,在B+树中所有信息保存在叶子节点,所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素,所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,这几句话实际上就是说,中间的数据作为索引,真的数据全部在叶子节点,从图中可以看出来,中间节点的每一个元素都存在于他们的孩子,并且是孩子节点的元素的最大值,但是真实查找还是的找叶子节点的元素,打个比方,我们要找6这个数据,在根结点就找到了6,但是还得继续向下,找他的左边第一个孩子,(2,4,6)也有6,不是叶子节点,再接着往下找最右边的孩子,(5,6),是叶子节点,这里的6才是我们要找的6

然后所有的叶子节点都有一个指向下一个叶子节点的指针,形成了一个有序链表

这里要说一个概念,卫星数据,画个图来说
在这里插入图片描述
就是每个节点,都可以带有一个卫星数据,比如说这棵树是一个数据库索引,那么卫星数据就可以是数据库中的某一行,这个卫星数据的位置也是B+树的特点之一,在B树里面,不管是中间节点还是叶子节点都带有卫星数据,但是在B+树中只有叶子节点才带有卫星数据,中间节点仅仅只是叶子节点的索引(在数据库的聚集索引中,叶子节点直接包含卫星数据。在非聚集索引中,叶子节点带有指向卫星数据的指针)

前面说这么多,好像看起来很麻烦,也没比B树好到哪去,下面来说一下B+树比B树的优点

首先是单条数据查询,在B树,中间节点也是数据,比如我们要找6,在哪找到了,那就在哪结束了,但是在B+树里面必须要找到叶子节点才算结束,似乎是麻烦了一点,但实际上是方便了很多,B+树的中间节点没有卫星数据,中间节点只是叶子节点的索引,所以在相同数据量的情况下,B+树会比B树要更“矮”,对应的IO操作要更少,这是第一点,其次B树的查询效率是不稳定的,最好的情况是在根结点一次查询,最坏的情况是要找到根结点,而B+树是什么情况都要找到叶子节点

再说一下范围查询,这就是B+树把叶子节点用指针连起来的好处,在B树上要查询一个范围的数据,比如要查3到8中间的所有数据,B树就需要做几次遍历,而B+树就可以直接找到3,然后从叶子节点的有序链表直接遍历到8,很明显要快很多

B+树的增加和删除操作都和B树差不多,所以就不多说了

所以总结一下B+树对比B树的优点:

  • B+树的单一节点可以存储更多元素,使得查询的IO次数更少。
  • B+树所有查询都要查找到叶子节点,查询性能稳定。
  • B+树所有叶子节点形成有序链表,便于范围查询。

B+树更多的用于数据库索引,比如MySQL的索引就是用的B+树,所以掌握这个数据结构很重要,面试基本上都会问到

CHARLS数据库下载避坑指南:从注册到数据获取的完整流程(2023最新版) 本文提供2023年最新版CHARLS数据库下载与使用全流程指南,涵盖从注册、数据申请到清洗的高效实践。重点解析邮箱选择、协议签署等关键步骤,并分享多线程下载、格式转换等实用技巧,助力研究者快速获取并处理这一中国中老年健康研究的黄金标准数据。 阅读详情

相关推荐

lumerical中DEVICE和MODE模块的交互使用(真的很干货!!可以自信的说网上绝对找不到比我更详细的步骤了)

几个脚本文件很重要! Lumerical仿真流程: 一、DEVICE: (1).建模并且运行完之后,在脚本提示符下键入以下脚本行以运行plotDopingProfile.lsf如图1(文件名如果索引不到的话就可以把文件直接用notepad++打开,然后把代码直接输入到device中script脚本中 如图2)脚本文件并生成下图 如图3: (图2) (图1) (图3) (2).仿真...

1万+

B树和B+树详解

Mysql调优之B树和B+ 树详解

一席之地 5万+

51单片机也能玩转GC9A01彩屏?超详细移植指南与性能优化技巧

本文详细介绍了如何在51单片机上高效驱动GC9A01彩屏,包括硬件连接优化、SPI模拟驱动、内存管理策略及高级刷新技术。通过分段缓冲、颜色压缩和差异化刷新等技巧,显著提升显示性能,使51单片机也能流畅运行240x240分辨率的彩色TFT屏幕。

hp777的博客 189

B树、B+树详解

B-树,即为B树。因为B树的原英文名称为B-tree,目前理解B的意思为平衡。 概念 首先,B树不要和二叉树混淆,在计算机科学中,B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。[1]与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。 定义 B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件: 每个节点最多只有m个子节点。 每

Cybenko 5508

STM32单片机远程升级

stm32远程升级

fang_yang_wa的博客 1万+

lammps建模(电解液)opls-aa力场的基本流程

lammps建模(电解液)opls-aa力场的基本流程

syj0922的博客 2131

数据结构-B/B+树

B树和B+树 B树大量应用在数据库和文件系统当中。 它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。 B树算法减少定位记录时所经历的中间过程,从而加快存取速度。 m阶B树 规则 根节点的关键字数量范围: 1 <= k <= m-1,非根节点的关键字数量范围: m/2 <= k <= m-1 每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。 所有叶子节点都位于同一层,

kk阿彬 1770

无人自行车平衡控制:最小二乘法动态零点拟合实践

本文探讨了无人自行车平衡控制中动态零点的重要性及实现方法。通过最小二乘法拟合车头角度与ROL值的线性关系,解决了固定零点在转向时导致的稳定性问题。实践表明,动态零点拟合能显著提升系统平衡稳定性并降低能耗。

uran的专栏 659

B 树和 B + 树:数据结构的深度解析

int value;int value;int height;// 获取节点高度return 0;// 获取平衡因子return 0;// 右旋操作(简化示意)return x;// 左旋操作(简化示意)y.left = x;return y;// 插入节点并保持平衡(简化示意,实际需更多处理)} else {// 不允许插入重复值,这里可根据实际需求处理// 左左情况// 右右情况// 左右情况。

m0_57836225的博客 5654

【天线与电波传播】电波传播部分 第7章 电波传播的基础知识3

菲涅尔区与菲涅尔带的基本知识

Chen59_2328的博客 1600

保姆级教程:STM32CubeMX配置PWM死区与刹车功能,防止电机驱动炸管

本文详细解析了使用STM32CubeMX配置PWM死区与刹车功能的完整流程,帮助工程师避免电机驱动中的炸管风险。通过深入讲解死区时间计算公式、CubeMX配置界面及刹车功能的安全机制,结合实际电路设计要点和调试技巧,为电机驱动和电源转换应用提供可靠解决方案。

weixin_42550597的博客 343

数据结构(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万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

速通B/B+树

B/B+树速通

yuwei021的博客 1933

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

B 树 / B+ 树原理总结

int *keys;// key 值数组// 子树指针int num;// 当前 key 数int leaf;// 是否为叶子节点 (1: 是, 0: 否)// 根节点树的层高直接影响查找次数与磁盘 I/O 次数B 树:所有节点存数据,平衡性通过分裂/合并维护B+ 树:索引与数据分离,叶子节点存数据,内部节点存索引,更适合磁盘和范围查询在实际应用中,B+ 树是数据库和文件系统的首选减少树的层高 → 减少磁盘 I/O → 提升性能。

m0_58390535的博客 851

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

B树/B+树/B*树及在数据库索引的运用

文章目录二叉查找树平衡二叉树(AVL Tree)平衡多路查找树(B-Tree)插入操作B+TreeB+树相比于B树的查询优势拓展:B*树   B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)...

Apple_Boy的博客 1314

mysql里b树_MySQL-B树/B+树

B树(B-树)B树又称平衡多路二叉树发现需要3次磁盘I/O操作,和3次内存查找操作。由于内存中的关键字是一个有序表结构,可以利用二分法查找提高效率。而3次磁盘I/O操作是影响整个B-Tree查找效率的决定因素。B-Tree相对于AVLTree缩减了节点个数,使每次磁盘I/O取到内存的数据都发挥了作用,从而提高了查询效率。B+树B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结...

weixin_39705018的博客 294

搜索树之B-/B+树的特性与实现

现代计算机中,在内存与外存(磁盘)组成的二级存储系统中, 数据全集往往存放于外存中,计算过程中则可将内存作为外存的高速缓存,存放最常用数据项的复本。借助高效的调度算法,如此便可将内存的“高速度”与外存的“大容量”结合起来。 两个相邻存储级别之间的数据传输,统称I/O操作。各级存储器的访问速度相差悬殊,故应 尽可能地减少I/O操作。仍以内存与磁盘为例,其单次访问延迟大致分别在纳秒(ns)和毫秒(m...

不能说的秘密的博客 6034

B/B+树 AVL 红黑树

B/B+树在MySQL索引中的应用,参见博客 B/B+树   B/B+树是一种平衡多路查找树(相对于二叉,B树每个内节点有多个分支),与红黑树相比,在相同的的节点的情况下,一颗B/B+树的高度远远小于红黑树的高度(在下面B/B+树的性能分析中会提到)。B/B+树上操作的时间通常由存取磁盘的时间和CPU计算时间这两部分构成,而CPU的速度非常快,所以B树的操作效率取决于访问磁盘的次数,关键字总数相同...

ThreeAspects的博客 546

B树/B+树

https://www.jianshu.com/p/cf7dba86c391 B+树讲解 B树,(B-Tree) 是一种多路查找树, 2-3树和2-3-4树都是B树的特列。 节点最大的孩子数目称为B树的阶。 数据库索引为什么会选择B树结构? 答:因为使用B树查找时,所用的磁盘IO操作次数比平衡二叉树更少,效率也更高。 为什么使用B树查找所用的磁盘IO操作次数比平衡二叉树更少? 答...

sowhat 1656

第 8 篇:B/B+ 树:为海量磁盘数据而生

B/B+ 树: 处理存储在磁盘上的海量有序数据,需要高效查找和范围查询时的标准方案(数据库索引、文件系统的核心技术)。

m0_73762612的博客 917

从 MongoDB 及 Mysql 谈B/B+树

前两天有位朋友邀请我回答个问题,为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树?我觉得这个问题非常好,从实际应用的角度来学习数据结构,没有比这更好的方法了。因为像 Mysql 和 MongoDB 这种经久考验的大型软件在设计上都是精益求精的,它们为什么选择这些数据结构?:) 本文从实际应用的角度来介绍以及分析B-树和B+树。 B-树由来 定义:B-树是一类树

IT小小鸟~~ 1万+

B/B+树与mysql索引

预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k) ,主存和磁盘以页为单位交换数据。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k) ,主存和磁盘以页为单位交换数据。B树中搜索时,离根节点近的节点找的就快,离根节点远的节点找的就慢,查找数据花费的时间不稳定。

master-dragon的专栏 991

【数据结构与算法】B/B+ 树 、RB树

B / B+ / B*树采用 多叉树 结构降低树深度,主要用在磁盘文件系统与数据库。 参考自: 1)http://taop.marchtea.com/03.02.html 2)https://segmentfault.com/a/1190000004690721 3)http://blog.codinglabs.org/articles/theory-of-mysql-index.html

mick_seu的博客 3293

AVL树、红黑树、B/B+树、Trie树

AVL树:平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡。由于旋转是非常耗费时间的。我们可以推出AVL树适合用于插入删除次数比较少,但查找多的情况。 红黑树:平衡二叉树,通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,确保

winstan_wahaha的博客 366
上一篇: 关于java的NIO(二)
下一篇: 红黑树
ye_xiao_dong
博客等级 码龄9年 28粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值