MySQL 二叉树 AVL树 红黑树 B-树 B+树 B*树
3年前
二叉树
一个节点最多只有两个子节点
树的层级结构比较深
左右两边数据层级不一致,查询的层级数量不稳定
平衡二叉树 (AVL)
一个节点最多只有两个子节点
左右两边层级深度差不能大于1
数据量大时,树的层级比较深
插入 删除 的效率低,查询效率高
红黑树 (red / black tree)
旋转 + 变色
左右两边最长深部不能大于最短深度的两边
一条链中不能出现两个相连的红色
一个节点中的两个链中黑色节点是一样的
AVL树的一个升级,提升了增删的效率
左旋 右旋
B树
每一个节点都保存数据
树的层级数量可以指定
每一个节点可以保存4K的倍数数据集(不单单指保存一个值)
预读的概念
由于每一个节点都保存数据,导致节点保存的数据量有限
比如一个节点保存16K数据,每一个数据大小为1K,那一个节点只能保存16个值
如果树有三层,每一个节点保存16个数据,三次IO最多保存161616 (4096个) 数据
因为存储的数据量太少,所以有了B+树
B+树
只有子节点才保存数据
所以相同的IO次数下,跟B-树相比,可以保存更多的数据

B* 树
每一个非子节点保存了下一个非子节点的地址
B*树插入时,当一个节点满时,如果它的下一个兄弟节点未满,那么将一部分数据移到兄弟节点中,再在原节点插入关键字,最后修改父节点中兄弟节点的关键字(因为兄弟节点的关键字范围改变了)。如果兄弟节点满了,则在原节点与兄弟节点之间增加新节点,并各复制1/3的数据到新节点,最后在父节点增加新节点的指针。
由于MySQL B+树非子节点不保存数据,所以没使用
文章来源于:https://blog.csdn.net/weixin_40869022/article/details/106886626