Balanced Tree

这个就是我们的多路平衡查找树,叫做B Tree(B 代表平衡)

跟AVL 树一样,B 树在枝节点和叶子节点存储键值、数据地址、节点引用。

它有一个特点:分叉数(路数)永远比关键字数多1。比如我们画的这棵树,每个节点存储两个关键字,那么就会有三个指针指向三个子节点。

B Tree 的查找规则是什么样的呢?

比如我们要在这张表里面查找15。

因为15 小于17,走左边。

因为15 大于12,走右边。

在磁盘块7 里面就找到了15,只用了3 次IO。

这个是不是比AVL 树效率更高呢?

那B Tree 又是怎么实现一个节点存储多个关键字,还保持平衡的呢?跟AVL 树有什么区别?

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

比如Max Degree(路数)是3 的时候,我们插入数据1、2、3,在插入3 的时候,本来应该在第一个磁盘块,但是如果一个节点有三个关键字的时候,意味着有4 个指针,子节点会变成4 路,所以这个时候必须进行分裂。把中间的数据2 提上去,把1 和3 变成2 的子节点。

如果删除节点,会有相反的合并的操作。

注意这里是分裂和合并,跟AVL 树的左旋和右旋是不一样的。

我们继续插入4 和5,B Tree 又会出现分裂和合并的操作。

从这个里面我们也能看到,在更新索引的时候会有大量的索引的结构的调整,所以解释了为什么我们不要在频繁更新的列上建索引,或者为什么不要更新主键。

节点的分裂和合并,其实就是InnoDB 页的分裂和合并。

多路平衡查找树(B Tree)(分裂、合并)相关推荐

  1. B树-多路平衡查找树

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

  2. B+树(加强版多路平衡查找树)

    B Tree 的效率已经很高了,为什么MySQL 还要对B Tree 进行改良,最终使用了B+Tree 呢? 总体上来说,这个B 树的改良版本解决的问题比B Tree 更全面. 我们来看一下InnoD ...

  3. 多路平衡查找树 --- B(B-)树

    1 简介 可以用阶数来描述B树, 一棵M阶B树代表着该B树最多有M个孩子节点. 如果M为2, 那么该B树就是一棵二叉搜索树. 一棵M阶B树具有以下性质: 1. 每个节点最多有M - 1个关键字. 跟普 ...

  4. 平衡查找树C语言程序,树4. Root of AVL Tree-平衡查找树AVL树的实现

    对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率.一种解决办法就是要有一个称为平衡的附加的结构条件 ...

  5. 查找算法之平衡查找树

    前面介绍的算法在最坏的情况下还是很糟糕.这次会介绍一种二分查找树并能保证无论如何构造它,他的运行时间都是对数级别的.理想情况下我们希望能够保持二分查找树的平衡性.但是,在动态插入中保证树的完美平衡的代 ...

  6. [转]B树(多向平衡查找树)详解

    B-树是对2-3树数据结构的扩展.它支持对保存在磁盘或者网络上的符号表进行外部查找,这些文件可能比我们以前考虑的输入要大的多(以前的输入能够保存在内存中). (B树和B+树是实现数据库的数据结构,一般 ...

  7. 平衡查找树C语言程序,C语言数据结构之平衡二叉树(AVL树)实现方法示例

    本文实例讲述了C语言数据结构之平衡二叉树(AVL树)实现方法.分享给大家供大家参考,具体如下: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树. 要维持这个树,必须在插入和删除的时候都检 ...

  8. 数据结构—2-3树、2-3-4树、B树、B+树等多路查找树的原理详解

    详细介绍了多路查找树中的2-3树.2-3-4树.B树.B+树的概念的区别,以及它们的应用场景. 文章目录 1 多路查找树的概述 1.1 索引概述 1.2 多路查找树的引出 2 2-3树 2.1 2-3 ...

  9. 数据结构之平衡树:2-3查找树的介绍——16

    平衡树(AVL tree) 引入 之前学习的树,都不是平衡的,查找时需要一个一个往内比较,一个结点只储存一个值,数据量存储较大,树的深度会非常的深,导致数据查询时效率会十分的低,本次学习的平衡树就能解 ...

最新文章

  1. 独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
  2. 基于python的人工智能Jiagu深度学习自然语言处理开源工具
  3. 2020年网站优化思路从哪着手?
  4. 20155231 实验三 敏捷开发与XP实践
  5. MySQL为什么有时候会选错索引?
  6. 转: 加快Android编译速度
  7. 遍历删除List中的元素,会报错? 用iterator.remove() 完美解决
  8. 【编译原理笔记03】词法分析:正则表达式、有穷自动机(FA)、DFA与NFA及RE的相互转换、DFA识别单词、语法检测
  9. c#简易学生信息管理系统
  10. 计算机机房规范管理,学校计算机机房如何有效科学规范管理
  11. 辽东学院计算机练习,辽东学院计算机应用基础课件.doc
  12. 行程单批量打印软件(eTerm航空电子客票行程单打印软件)
  13. 清华大学计算机科学系王瑀屏,清华大学材料科学与工程系
  14. node-addon-api 的简单使用,c++数值、字符串、对象、数组转化为js可用数据。
  15. SSM考试题库管理系统毕业设计源码069043
  16. 让沟通更高效的职场礼物,讯飞智能录音笔SR502值得入手
  17. 域名遭到劫持怎么办?
  18. cocos2d-x 3.0 Win7 + VS2012 下实现贪吃蛇小游戏
  19. mysql求中位值函数_SQLServer下取中位数(中位值)的方法
  20. 喜讯:世界首款阿兹海默老年痴呆症治疗药将上市

热门文章

  1. github 提交报403 forbidden的错误解决
  2. JDK6笔记(3)----正则表达式
  3. zookeeper学习一
  4. mysql修改表结构(拆分)
  5. memcached使用详解
  6. Android 滑动效果基础篇(四)—— Gallery + GridView
  7. 关于编译器的一个疑问
  8. 【easyui】easyui datagrid加载成功之后选定并获取首行数据
  9. 【疑】poj 2773 Happy 2006 互素问题(★★☆☆☆)
  10. zabbix监控(三)