当前位置: 首页 > news >正文

B树 B+树

B树

AVL树是二叉平衡查找树,B树就是多路平衡查找树

B树就是B-树,中间的短线是英文连接符,只是翻译的时候将短线翻译成了减号。

B树全称Balance-tree

B树是为了存储设备或者磁盘而设计的一种平衡查找树,与红黑树类似

 

B+树

       B+树是B树的一种变形,它把数据都存储在叶结点,而内部结点只存关键字和孩子指针,因此简化了内部结点的分支因子,B+树遍历也更高效,其中B+树只需所有叶子节点串成链表这样就可以从头到尾遍历,其中内部结点是并不存储信息,而是存储叶子结点的最小值作为索引

 

 

B+树的叶子节点之间用指针连在一起

每一个父节点的元素都出现在子节点中,是子节点的最大(或最小)元素
    

根节点的最大元素,也就等同于整个B+树的最大元素。
以后无论插入删除多少元素,始终都要保持最大元素在根节点当中


所有数据都会出现在叶子节点当中
父节点的元素都会出现在叶子节点当中

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

 

not all values found in the inner nodes of the index must appear as data entries in the leaf nodes of the index. They are there ONLY for navigation purposes. They could be there due to some previous deletions, for example. Remember also that B+trees only store the data (data entries) in the leaf pages.

 

为什么说B+树比B树更适合做操作系统的数据库索引和文件索引?

(1)B+树的磁盘读写的代价更低

B+树内部结点没有指向关键字具体信息的指针,这样内部结点相对B树更小。

(2)B+树的查询更加的稳定

因为非终端结点并不是最终指向文件内容的结点,仅仅是作为叶子结点中关键字的索引。这样所有的关键字的查找都会走一条从根结点到叶子结点的路径。所有的关键字查询长度都是相同的,查询效率相当。

 

 

     B+树中间节点没有Data数据,所以同样大小的磁盘页可以容纳更多的节点元素。所以数据量相同的情况下,B+树比B树更加“矮胖“,因此使用的IO查询次数更少。

 

https://blog.csdn.net/qq_26222859/article/details/80631121

https://www.bilibili.com/video/BV1n7411A7x3

 

 

MySQL数据表的B+树索引图

B+树的叶节点是磁盘页

 

 

 

同样节点的B树与B+树

 

 

相关文章:

  • Node-Red(一)——简介与安装
  • 数据挖掘与数据分析(四)—— 预处理理论(1) —— 特征工程 Feature Engineering
  • representation learning 表示学习/表征学习
  • Darknet 轻量级深度学习训练框架
  • cfg文件
  • 双向循环神经网络(BiRNN)MNIST手写体识别(tensorflow)
  • 双向循环神经网络(BiRNN)
  • MIPS
  • FPGA
  • Verilog硬件描述语言
  • SLAM
  • 深度估计(Depth Estimation)
  • 视觉里程计Visual Odometry(VO)
  • LiDar 激光雷达
  • Gazebo
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Angularjs之国际化
  • chrome扩展demo1-小时钟
  • Docker: 容器互访的三种方式
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java Agent 学习笔记
  • Java反射-动态类加载和重新加载
  • js中forEach回调同异步问题
  • learning koa2.x
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • React-Native - 收藏集 - 掘金
  • Spring框架之我见(三)——IOC、AOP
  • SQLServer之索引简介
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 使用 @font-face
  • 微信开放平台全网发布【失败】的几点排查方法
  • 线上 python http server profile 实践
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 因为阿里,他们成了“杭漂”
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Java数据解析之JSON
  • 阿里云移动端播放器高级功能介绍
  • 从如何停掉 Promise 链说起
  • ​configparser --- 配置文件解析器​
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (二十三)Flask之高频面试点
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 反射的使用
  • .NET处理HTTP请求
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET中统一的存储过程调用方法(收藏)
  • /boot 内存空间不够
  • /etc/sudoers (root权限管理)