目录
B树存在的意义:
二叉树在存储数据时可能出现向一边倾斜导致查询效率降低的情况,为了防止二叉树的倾斜,出现了平衡二叉树,通过旋转的方式保证二叉树的平衡。但是就算是保持绝对的平衡,在面对要存储的数量量级够大的时候也会出现树的高度整体偏高的问题,树的高度过高,即使是使用了二分查找,依然会出现查找效率变低的情况。尤其是磁盘查找数据本身是个机械完成的动作,这一动作本身就十分耗时。因此需要一种能进行二分查找缩短查找时间,能存储大量数据后树高也不会过高的树形结构,这就是B树。
B树的概念:
B树又称为多路平衡查找树,满足以下规则:
以下展示一个B树的示例,省略号表示为了节约作图空间没画出来但是存在的结点:
B树的缺点:
不适合范围查找,例如我们要查找上面这棵B树里>5的数据,那么要在找到15后还要继续查找30右边的指针,40右边的指针......可以看到需要进行很繁复的遍历。
3、8、31、11、23、29、50、28 构建一个5阶B树。
5阶B树,因此每个节点有4个关键字,5个分支。
因为B树对范围查询效果不好,于是出现了对于范围查询有较好支持的B+树。
B+树其实就是专门为了更好的支持范围查询,微调了一下B树的结构。
思路:
可以看到B树和B+树各有优缺:
存放同样的数据,B树的内存开销要低于B+树,因为B+树在叶结点挂了路径上的所有数据,相当于把数据存了两份。但是B+树的范围查询效率更好。