Mysql InnoDB B+Tree是什么?

“mysql中常用的数据库搜索引擎InnoDB,其索引通过B+Tree的方式进行构建。”

实在想不起来B+Tree是怎么一回事了。以点带线,将涉及到的数据结构一起复习一下。

数据结构定义

数据结构
定义
二叉树 每个节点最多有两个子树
二叉排序树 又叫二叉搜索树。在二叉树的基础上,递归定义 任意子树根节点大于其左子树最大值小于右子树最小值. 左<根<右
平衡二叉树 在二叉排序树的基础上, 递归定义 任意节点 左右子树的高度差≤1.
红黑树 在二叉排序树的基础上,递归定义 见下方
BTree B-Tree 同一个东西。见下方
B+Tree 见下方

如果插入的是有序序列, 二叉排序树的效率降低为O(n). 所以推出 平衡二叉树

红黑树

定义

  1. 左中右: 前提是一棵二叉搜索树(左<中<右)
  2. 根、叶黑: 根节点和叶子结点都是黑色
  3. 不红红: 不存在两个红色节点有直接父子关系
  4. 黑路同: 任意节点到所有叶子节点经过的黑色节点数相同

使命

红黑树并不是在平衡二叉树的基础上定义的。

由于平衡二叉树左右子树高度差≤1,要求过于严格。虽然查询效率较高,但插入、删除时,调整频繁, 因此引入红黑树。

由于不红红和黑路同的性质可以推断出:红黑树左右子树最长路径节点数不超过最短路径的2倍。

相对于平衡二叉树,插入、删除效率有所提升。

BTree

BTree 就是多路查找树(一个节点内可以有多个元素),每个元素都有左右子树。 2阶BTree, 退化成平衡二叉树

定义

  1. 有序 1. 结点元素内有序 2. 元素的左子树都小于它,右子树都大于它

  2. 平衡 所有的叶结点都在同一层

  3. 节点限制 m阶BTree

    根节点至少有1个元素,2个分支

    其他节点 至少有(m+1)/2个分支, (m-1)/2个元素(左右间隙肯定要比元素数多1)

    所有节点元素数<m, 分支数≤m。 所有叶子节点在同一层上

使命

数据是存储在磁盘上,每次将节点读入内存,就需要一次IO操作,IO操作是比较耗时。树的高度,限制了数据的查找效率。

一次IO读取连续地址的多个字节和读取一个字节几乎没有什么差别。

通过增加节点元素数,降低树的高度 就成为了必然的选择。

一个节点可以有多个元素 每个元素左右间隙指向后续节点。将左右间隙视为左右子树。

B+Tree

定义

从BTree基础上发展而来,

  1. 非叶子结点直接存储索引,>左子树最大值,<=右子树最小值
  2. 叶结点包含全部关键字及指向相应记录的指针,非叶结点只作索引
  3. 所有节点元素数<m(也有地方说是<=m), 分支数≤m
  4. 每一个叶子节点都有指向后续叶子节点的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值