天天看点

mysql中用到的一些树

在mysql的各种引擎中,最常用到树就是 B树,B+树,最早由平衡二叉树演变而来

所以我们要了解B+树,首先需要了解二叉树,平衡二叉树,平衡多路查找树(B-树)

1,二叉树,左边的树的键值小于跟键值,右侧子树的键值大于跟键值

mysql中用到的一些树

当深度为一的时候,查找次数为1,深度为二的时候,随着3号球的加入,查找次数变为两次,7号球的加入,查找次数为两次。

当深度为三的时候,3号球加入,查找次数为3,5号球,8号球同理,最终平均查找次数为(1+2+2+3+3+3)/6 为 2.3次

2,平衡二叉树

平衡二叉树,在符合二叉树的条件下,还满足两个子树的高度差,最大为1

mysql中用到的一些树

当平衡树中插入,或者删除节点导致由平衡树变为非平衡树的时候,可以通过旋转的方式,重新平衡

3,平衡多路查找树:

B-树是为磁盘等外部内存设计的平衡查找树。

B-Tree 能让系统搞笑的找到数据在的磁盘,然后进行数据读取。

为了描述它,我们需要定一个二元组[key,data] ,key记录键值,data记录除键值外的主数据

mysql中用到的一些树

每个节点占用一个磁盘空间,一个节点上两个升序关键字,三个只想子节点的指针。以根节点为例

p1 指向 大于17的磁盘空间,p2指向 17到35,p3指向 大于35的位置

例如我们查找36

根节点找到磁盘块1,读入内存【磁盘I/O第一次操作】

比较36,大于35,找到指针p3

根据p3找打磁盘块3,读入内存【磁盘I/O第二次操作】

比价36,小于65,找到指针p1

根据p1找到磁盘块9,读入内存【磁盘I/O第三次操作】

在磁盘中找到 36

可见B-Tree 减少了i/o操作,可以提高查询效率

4,B+Tree

mysql中用到的一些树

相比B-树,缺少了data,就可以更多的存储key,从而减小深度