Mysql中BTree和B+Tree

前言

为啥要使用B+Tree,而不是用普通二叉树和AVL平衡二叉树呢

一、普通二叉树

1.检索原理

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
二叉树的特点:
1、一个节点只能有两个子节点,也就是一个节点度不能超过2
2、左子节点 小于 本节点;右子节点大于等于 本节点,比我大的向右,比我小的向左
在这里插入图片描述

2.问题

这种方式查找:时间复杂度会再次上升
在这里插入图片描述

二、AVL平衡二叉树

1.检索原理

  • AVL树全称G.M. Adelson-Velsky和E.M. Landis,这是两个人的人名。
  • 在插入数据的时候会自动发生n多次旋转操作,旋转操作会消耗一定的性能!旋转的目的就是保证这个棵数的平衡。平衡二叉树要求左子树与左子树的高度差不能超过1
    https://www.cs.usfca.edu/~galles/visualization/AVLtree.html
    在这里插入图片描述

2.问题

  • 在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响。
  • 节点海量,也会造成二叉树的高度很大,会降低操作速度。

3.解决问题

我们为了减少磁盘IO的次数,就必须降低树的深度,将“瘦高”的树变得“矮胖”。
(1)每个节点存储多个元素
(2)摒弃二叉树结构,采用多叉树
红黑树:
插入顺序:2,1,4,5,3,6
在这里插入图片描述
当再次插入7的时候,这棵树就会发生旋转
在这里插入图片描述
在这个棵严格的平台树上又进化为“红黑树”{是一个非严格的平台树 左子树与左子树的高度差不能超过1},红黑树的长子树只要不超过短子树的两倍即可!

三、BTree索引

1.【B树的介绍】

B-Tree树即B树,B即Balanced,平衡的意思。

  • B-Tree即B树,Balance Tree,平衡树。
  • 2-3树是最简单的B树结构。
  • B树的阶:节点的最多子节点个数。比如2-3树的阶是3,2-3-4树的阶是4。
  • B树通过重新组织节点,降低树的高度,并且减少IO读写次数来提升效率。
  • 关键字集合分布在整颗树中,即叶子节点和非叶子节点都存放数据。
    在这里插入图片描述
    https://www.cs.usfca.edu/~galles/visualization/BTree.html

2.【检索原理图】

黄色:指针,存储子节点的信息地址
红色:键值,表中记录的主键
蓝色:数据,记录表中除主键外的数据
在这里插入图片描述
以上图为例:若查询的数值为5:
  第一次磁盘IO:根据根节点找到磁盘块1,读入内存,执行二分查找,比17小,根据指针P1,找左子树;
  第二次磁盘IO:找到磁盘块2,读入内存,执行二分查找,比8小,根据指针P1,找左子树;
  第三次磁盘IO:找到磁盘块5,读入内存,执行二分查找,找到5,终止。
整个过程中,我们可以看出:BTree相对于平衡二叉树降低了树的高度,缩减了节点个数,减少了I/O操作,提高了查询效率
还可以优化!让每个磁盘块存储更多的指针

四、B+Tree索引

1.【B+树的介绍】

B+Tree 即B+树:

  • B+树是B树的升级版本,区别是所有数据只出现在叶子结点中,即叶只有叶子节点存放数据,非叶子节点只是叶子结点中数据的键值和指针。
  • 所有的叶子结点中包含了全部数据信息,及指向含这些数据记录的指针,叶子节点之间通过指针相连,且叶子结点本身依键值的大小自小而大顺序链接。
  • 由于B+树的非叶子节点不存储数据,因此每个节点可以存储更多的信息,假设每个节点能存储4个键值和指针信息,则变成B+树后其结构如下图所示:
    在这里插入图片描述
    https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

2.【检索原理图】

由于B+树的非叶子节点只存储键值和指针信息,假设每个磁盘块能存储4个键值及指针信息,则变成B+树后其结构如下图所示:
在这里插入图片描述

五、BTree和B+Tree比较

  • 首先,B+树的查找和B树一样,起始于根节点,自顶向下遍历树。
  • 不同的是,B+树中间节点不存储数据,只有键值和指针,而B树每个结点要存储键值和实际数据,这就意味着同样的大小的磁盘块B+树可以容纳更多节点元素,在相同的数据量下,B+树更加“矮胖”,IO操作更少 。
  • 现代操作系统中,磁盘的存储结构使用的是B+树机制,MySQL的InnoDB引擎的存储方式也是B+树机制

六、面试题

1.b-tree和b+tree的区别

b-tree我们称之为B树。B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下:
在这里插入图片描述
B树的特点:
(1)所有键值分布在整个树中
(2)任何关键字出现且只出现在一个节点中
(3)搜索有可能在非叶子节点结束
(4)在关键字全集内做一次查找,性能逼近二分查找算法B+Tree
在这里插入图片描述
从图中也可以看到,B+树与B树的不同在于:
(1)非叶子节点只存储键值信息
(2)所有叶子节点之间都有一个链指针
(3)数据记录都存放在叶子节点中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight_AL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值