首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图解:什么B-B+B*

什么B B,即B-treeBBalanced首字母,平衡的意思 因为B的原英文名称为B-tree 很多人喜欢把B-tree译作B-,然后读作B 其实,这么不对的 容易让人会以为B...B-两种树 特此声明:B-就是指的B 好了,本章结束 ?...什么B- 首先B-一种多路平衡搜索 简单来说,就是每个节点不止存储一个数据值 每个节点也不止有两个子节点 比起平衡二叉,它能很大程度减低的高度 提高的检索效率 3.1 B-的特点 下面来具体介绍一下一个...什么B+ B+B-的变体,也是一种多路搜索 4.1 B+的特点 其定义基本和特性与B-同,除了: 1.非叶子结点的子树指针与关键字个数相同 2.非叶子结点的子树指针P[i],指向关键字值属于...什么B* B+的变体,在B+的非根和非叶子结点再增加指向兄弟的指针 B*定义了非叶子结点元素个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+的1/2) B*的查询、插入和删除操作和

8.2K43

漫画:什么B+

在上一篇漫画中,我们介绍了B-的原理和应用,没看过的小伙伴们可以点击下面的链接: 漫画:什么B-? 这一次我们来介绍B+。...一个m阶的B+具有如下几个特征: 1.有k个子树的中间节点包含有k个元素(Bk-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。...B-中的卫星数据(Satellite Information): B+中的卫星数据(Satellite Information): 需要补充的,在数据库的聚集索引(Clustered Index...k个子树的中间节点包含有k个元素(Bk-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。...3.所有的中间节点元素都同时存在于子节点,在子节点元素中最大(或最小)元素。 B+的优势: 1.单一节点存储更多的元素,使得查询的IO次数更少。 2.所有查询都要查找到叶子节点,查询性能稳定。

28930
您找到你想要的搜索结果了吗?
是的
没有找到

漫画:什么B-

———————————— ———————————— 二叉查找的结构: 第1次磁盘IO: 第2次磁盘IO: 第3次磁盘IO: 第4次磁盘IO...: 下面来具体介绍一下B-(Balance Tree),一个m阶的B具有如下几个特征: 1.根结点至少有两个子女。...5.每个节点中的元素从小到大排列,节点当中k-1个元素正好k个孩子包含的元素的值域分划。...节点3,5已经两元素节点,无法再增加。父亲节点 2, 6 也是两元素节点,也无法再增加。根节点9单元素节点,可以升级为两元素节点。于是拆分节点3,5与节点2,6,让根节点9升级为两元素节点4,9。...删除11后,节点12只有一个孩子,不符合B规范。因此找出12,13,15三个节点的中位数13,取代节点12,而节点12自身下移成为第一个孩子。

29530

深入理解什么B

4,B保证树种至少有一部分比例的节点满的。...为什么这样说,在上面的性质2中,我们知道每个节点最少可以有 m/2个节点,注意这刚好一半,没有太满,是因为可以给后续的添加,删除留有余地,这样以来节点不会频繁的触发不平衡,没有太空则意味着B能够 保证降低的高度...注意这里可以思考一个问题,为什么B的根节点阶2到m,而不是其他非叶子节点的m/2 到 m,这其实从分裂过程就能看出来,因为在根节点在关键码多于2的时候分裂,分裂到最终的情况下就是从3个关键码中分裂,...,前面说过B+的孩子节点个数保持在50%的饱满程度,而B保持在75%的饱满程度,当然这种设计会导致算法更加复杂,有利也有弊,在实际应用中并不常见。...总结 本篇文章主要介绍了B相关内容,B面向磁盘的索引结构,B+基于B的扩展,更好的支持了范围检索,常应用在主流的数据库中如MySQL,Oracle等,对B的学习和理解掌握数据库索引原理必须不少的基础

4.8K41

深入理解什么B+

前言 上一篇已经详细的介绍了什么B,但B这种结构仍有不足之处,比如对范围检索就比较费劲,所以科学大佬们就继续改造扩展,在B的基础上发明了B+,上篇文章中也简单提到过B+,本篇我们就来详细的学习一下...B+的结构定义 首先B+B的一种扩展,在B+里面,非叶子节点不再存储数据,仅仅存在索引,而叶子这点存储具体的数据,并且最底层的数据直接之间从做到右按照从小到大的顺序分布,并且一个双链表的结构...(3)根节点要么空,要么独根,否则至少有2个子节点 (4)有k个子节点的节点必有k个关键码 (5)叶节点的高度一致 我们看下面的图对比下BB+B的结构: ? B+的结构: ?...跳跃表支持的功能和B+一样丰富,跳跃表毕竟是面向内存的数据结构,并不适合给数据量较大的数据库做索引,这也是B+什么出现的原因,但实际上跳跃表(1989年)比B+(1972年)出现的要晚,推测在一定程度上借鉴了...总结 本文主要深入的介绍了B+的相关内容,B+B的扩展,此外还有B,这里提下B,其充盈程度0.75到1之间,在实际应用中并不常见,所以不再细说。

9.3K41

BB+到底是什么

,指向这些结点的指针为空) B所有结点的平衡因子均等于0的多路平衡查找。...B的查找包含两个基本操作: 在B中找结点 在结点内找关键字。 由于B常存储在磁盘上,因此前一个查找操作在磁盘上进行的,而后一个查找操作在内存中继续的。...B+ B+对应数据库所需而出现的一种B的变形。...在B+中,每个结点(非根内部结点)的关键字个数n的范围【m/2】<=n<=m(根节点:1<=n<=m); 在B中,每个结点(非根叶结点)的关键字个数n的范围【m/2】-1<=n<=m-1(根节点...在B+中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B中,叶结点包含的关键字和其他结点包含的关键字不重复的。

1K40

你好,我B

一、什么BB一棵具备以下特点的有根。 1、节点属性 a)x.n:为节点中存储的关键字个数。 b)x.key:为节点中存储的关键字。...四、B的插入 B插入新关键字后,必须仍然一颗合法的B。 由【一.4.b】我们直到 B 树节点存在一种状态【满】,即当前节点关键字个数为 2t -1。...此处需要注意的,如果父节点同样为【满】节点,那么在分割点上升之前,同样需要对父节点执行【分裂】操作。 满节点的分裂行为会沿着向上传播直到不再需要分裂为止。...上面我们描述的过程,一个自下而上的【满】状态分裂传播行为。 我们知道,要实现节点的插入,首先需要经过一个B的搜索查找的过程,搜索过程自上而下。...五、B的删除 B删除特定关键字后,必须仍然一颗合法的BB的插入一个对节点最大关键字数量的约束满足过程,相应的,B的删除一个对节点最小关键字数量的约束满足过程。

30520

拜托,别再问我什么B+

为啥索引常用 B+ 作为底层的数据结构 除了 B+ 索引,你还知道什么索引 为啥推荐自增 id 作为主键,自建主键不行吗 什么页分裂,页合并 怎么根据索引查找行记录 本文将会从以下几个方面来讲解...B+ 定义问题 几种常见的数据结构对比 页分裂与页合并 定义问题 要知道索引底层为啥使用 B+ ,得看它解决了什么问题,我们可以想想,日常我们用到的比较多的 SQL 有哪些呢。...什么跳表?简单地说,跳表在链表之上加上多层索引构成的。如下图所示 ?...,实际上它的结构已经和 B+ 非常接近了,只不过 B+ 从平衡二叉查找演化而来的而已,接下来我们一步步来看下如何将平衡二叉查找改造成 B+ 。...所以在内存中完全装载一个 B+ 索引显然有问题的,如何解决呢。

51120

B B- B+ B*

; 如果B的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销...右边也是一个B,但它的搜索性能已经线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B还要考虑尽可能让B保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题;      ...实际使用的B都是在原B的基础上加上平衡算法,即“平衡二叉”;如何保持B结点分布均匀的平衡算法平衡二叉的关键;平衡算法一种在B中插入和删除结点的策略; B- 一种多路搜索(并不是二叉的...M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并; B+        B+B-的变体,也是一种多路搜索:        1.其定义基本与B-同,除了:        2.非叶子结点的子树指针与关键字个数相同...4.更适合文件索引系统; B* B+的变体,在B+的非根和非叶子结点再增加指向兄弟的指针; ?

1.6K70

高频面试题:什么B?为啥文件索引要用B而不用二叉查找

帅地:确实,如果查找效率(即比较次数)的话,实际上二叉可以说是最快的了,但是,我们的文件索引存放在磁盘上的,所以我们不仅要考虑查找效率,还要考虑磁盘的寻址加载次数哦,而这也是我们为什么要用 B 的原因...小秋:难道二叉查找会导致磁盘的加载次数更多吗?可以给我详细讲讲吗? 帅地:可以呀,不过听懂了,觉得我讲的不错,你要记得给我多点赞,转发哦。 小秋:绝对没问题。 三、什么 B ?...帅地:要讲懂这个问题,我们先来了解一下什么 B ,其实,B 和二叉查找一样,都是B 相当于是一棵多叉查找,对于一棵 m 阶的 B 具有如下特性: 1、根节点至少有两个孩子。...B 快的多,这也是为什么我们用使用 B 来存储的原因。...帅地:B 除了会用在少部分的文件索引(数据库索引)外,应用的最多的就是文件系统了。至于为什么要用 B 而不用 B+ ,为什么数据库索引大部分用 B+ 而不用 B ,我们下节再讲了。

1.3K90

高频面试题:什么B?为啥文件索引要用B而不用二叉查找

帅地:确实,如果查找效率(即比较次数)的话,实际上二叉可以说是最快的了,但是,我们的文件索引存放在磁盘上的,所以我们不仅要考虑查找效率,还要考虑磁盘的寻址加载次数哦,而这也是我们为什么要用 B 的原因...小秋:难道二叉查找会导致磁盘的加载次数更多吗?可以给我详细讲讲吗? 帅地:可以呀,不过听懂了,觉得我讲的不错,你要记得给我多点赞,转发哦。 小秋:绝对没问题。 三、什么 B ?...帅地:要讲懂这个问题,我们先来了解一下什么 B ,其实,B 和二叉查找一样,都是B 相当于是一棵多叉查找,对于一棵 m 阶的 B 具有如下特性: 1、根节点至少有两个孩子。...B 快的多,这也是为什么我们用使用 B 来存储的原因。...帅地:B 除了会用在少部分的文件索引(数据库索引)外,应用的最多的就是文件系统了。至于为什么要用 B 而不用 B+ ,为什么数据库索引大部分用 B+ 而不用 B ,我们下节再讲了。

46530

《深入浅出话数据结构》系列之什么BB+?为什么二叉查找不行?

本文将为大家介绍BB+,首先介绍了B的应用场景,为什么需要B;然后介绍了B的查询和插入过程;最后谈了B+针对B的改进。 在谈B之前,先说一下B所针对的应用场景。...那么B用来做什么的呢?B一种为辅助存储设计的一种数据结构,普遍运用在数据库和文件系统中。...当然来自二叉中的那个二。那么这个底数能不能变大呢?当然能!!!那就是不要用二叉,而要用多叉,这就是我们要说的B了。 B什么 B也称B-,它是一颗多路平衡查找。...关于B的插入操作,可以参考【为什么有红黑什么红黑?看完这篇你就明白了】这篇推文中关于2-3的插入操作的详细介绍,其实2-3就是一种特殊的B。限于篇幅,本文不再赘述。...从BB+ B+B衍生而来的,比B更具有优越性。B+相对于B主要做了两点改进: (1)非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。

96520

B-B+B*

1.减少磁盘的IO 2.更快的搜索算法 操作系统中, 管理内存按照页page 4K 管理的 管理磁盘按照block 16K 现在有n = 1000w个索引需要从磁盘中进行读取和搜索?...avl和m为300的B-? avl的高度:log2n = 24层 最差的情况一个节点只存储一个索引?...最差需要24次磁盘IO B-高度:log(300)n = 3 层 最多花费3次磁盘IO B+ B+B-的一种变形 非叶子结点只存储索引,不存储数据 B+的叶子结点包含全部的关键字信息...,而B-的数据分散在各个结点当中。...B+存放的索引项相对于B-能够存储的更多。 B* B*B+的变体,在B+的非根和叶子结点在增加指向兄弟结点的指针 B*提高了结点的利用率。

1K30

多叉 & B & B+ & B*

2-3 2-3最简单的B,它有以下特点: 首先它也要满足排序的特点,即左子节点都比父节点小,右子节点都比父节点大,如果3节点,那么中间那个元素要介于左节点和右节点之间,即6介于4和11之间的...(2). 2-3-4: 和2-3的区别就是,它还允许节点有三个元素且有四个子节点。 4. BBbalance,平衡的意思,所以,B首先是一棵平衡,而平衡首先得一棵排序数。...B+B+B的变体,和B的区别就是,B+所有数据都存放在叶子节点。...B+所有的数据都存放在叶子节点的链表中,且链表中的数据也是有序的; 非叶子节点中存放的索引,而不是要操作的数据,每个非叶子节点都会存放叶子节点的索引,也叫稀疏索引; B+要进行搜素时,从根节点开始...B+一般用于文件系统; 6. B*B*又是B+的变体,就是在B+的基础上,在非根非叶子节点之间增加了指向兄弟节点的指针。

1.5K20

什么MySQL索引要用B+,而不是B

这个问题的简单回答:约 2 千万。 为什么这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从 InnoDB 索引数据结构、数据组织方式说起。...如何组织数据、查询数据的,我们总结一下: InnoDB 存储引擎的最小存储单元页,页可以用于存放数据也可以用于存放键值+指针,在 B+ 中叶子节点存放数据,非叶子节点存放键值+指针。...那么如果有一张表行数一千万,那么他的 B+ 高度依旧 3,查询效率仍然不会相差太大。region 表只有 5 行数据,当然他的 B+ 高度为 1。...最后回顾一道 MySQL 面试题:为什么 MySQL 的索引要使用 B+ 而不是其他树形结构?比如 B ?现在这个问题的复杂版本可以参考本文。...他的简单版本回答:因为 B 不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出)。

73010

MySQL为什么B+,而不用B

大家好,又见面了,我全栈君。 面试题1: MySQL为什么B+,而不用B?...1.b+只有叶子节点存数据 b每个节点都存数据 在相同数据量下b的高度更高,所以查询效率更低 2.b每一层存的数据+索引; b+除了叶子节点存的数据+索引以外,其余节点只存索引,所以在相同数据量的情况下...,b的高度会比b+ 高很多 面试题2:微服务架构中日志有什么好方案吗?...本地分析一般在宿主机上安装代理,执行分析命令,上报到服务器 面试题3:Mysql主从的延迟怎么解决呢,有什么好的思路吗?...微服务一种架构方式,拆分这个事不是核心问题,重点在服务治理能力。服务治理跟不上,拆分就是灾难。 那么问题来了,服务治理一般都包括哪些工作?

97520

BB+B*——简单介绍

IDEA 注册码,2020.2 IDEA 激活码 一、为什么B ---- 二叉存在的问题:二叉的构建在内存中执行的,需要将磁盘中的文件通过 IO操作进行读取。...;   ■  有三个子节点的叫三节点,三节点要么没有子节点,要么有三个子节点;   ■  2-3 由二节点和三节点构成的;   ■  当按照规则插入一个数到某个节点时,不能满足上述要求时,就需要拆分...翻译成 B-,容易让人产生误解,会以为 B-一种。...三、BB+B* ---- 【1】B介绍:前面介绍的2-3、2-3-4就是 B,在 MySql 中经常听说某种索引基于 BB+的,如下图: ?...【2】B+介绍:B+ B的变体,也是一种多路搜索,如下图: ? 【3】B* 介绍:B* B+的变体,在B+的非根和非叶子节点增加了指向兄弟的指针,如下图: ?

1.2K20

BB-)、B+ 简述

要是那个人说bb-不一样 那你可以认为他zz了hh,b就是b- 说起来b的发明主要是为了减少磁盘io操作 将的结构设计成矮胖型而不是瘦高型,因为数据库索引存储在磁盘上的,当数据量比较大时...,我们不能把所有索引加载到内存中,只能逐一加载每一个磁盘页,这里的磁盘页对应索引的节点 一个m阶的B具有如下几个特征: 1.根结点至少有两个子女。...5.每个节点中的元素从小到大排列,节点当中k-1个元素正好k个孩子包含的元素的值域分划。 ?...一个m阶的B+具有如下几个特征: 1.有k个子树的中间节点包含有k个元素(Bk-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。...3.所有的中间节点元素都同时存在于子节点,在子节点元素中最大(或最小)元素。 下图一个b+b-改造加链表) ?

1.1K40
领券