我们知道,数据库的底层索引,都是由B类树实现的。
什么是B类树?为什么选用B类树呢?
这是我们需要探寻的。
在学习B类树之前,还是先复习一下平衡二叉树的知识
一个顶点两个叉(叶子)。
左右高度差不超过1。如果超过,则需要左右旋转来重新保持平衡。
左边子结点小于父结点,右边子结点大于父结点。(大小规则,自定义)
这样,查找的话,每次比较查找的值与节点的值,从而判断是从左还是从右边下去,可以将查找比较次数降低到不足Log(n),n为结点数。
那B树跟二叉平衡树有什么差别呢?
B树的叉更多了,二叉树就2个叉,要么左,要么右,B树可以有更多的叉(2个叉不够用了)。用术语来讲的话,叫B树的阶M,我们说的有几个叉值=M-1
查了半天,个人觉得该篇文章讲的更清晰一点。B树、B+树
查资料的过程中,发现有的文章把B树跟B-树分成两个概念,其实是不对的,因为B树的英文就叫B-Tree。。。这是翻译的锅。
B树看下来也就是叉多了一点,从根节点到叶子节点,都是保存有数据的,值离根节点越近,那么需要查找比较的次数也就越少。
这篇也挺好
那B+树跟B树有啥区别呢?
从图比较,很明显,下面多了一条线把最后一层的值都串起来了。
而且上面的树形值与下面的值有重复哦。为啥?
因为B+树只有下面一层的值才是真正的值,上面的树形只是索引用的,不是用来保留数据的。
大家都在同一层居住,那么从根节点开始拜访的话,到每个值的高度都是相同的。比较稳定。
具体如何左旋右旋,如何分离节点,合并节点,大家各自去查找吧,这边就不再赘述了,下一章我们来学习高性能索引。