前言
前面我们说了红黑树,他是一种特殊的搜索树,但是由于他只是二叉树,所以这就导致他在大量的数据面前深度过高,同时会造成大量的磁盘空间浪费,所以我们又研究出来了B树和B+树
B树
他是人们早期的一种设计,他打破了二叉树的方式,它可以有多个分支,使得磁盘空间可以重分利用,同时减少了IO操作
定义:
- 结点最多有M颗子树,M-1关键字
- 除了跟结点和叶子结点处,他的每个结点至少有(M/2)个子节点,向上取整(分裂的时候分开,则至少两颗子树)
- 若根结点不是叶子结点,则至少有两颗子树
一颗标准的B树如下图
B-tree的插入方式-分裂
大致可以描述过程是,首先定义一个M阶的树,之后向第一个结点里面插入数据,如果大于就插入到这个树左边,如果小于这个数就插入到这个树右边,当结点满的时候,他会发现分裂,在M/2向上取整地方分裂,然后那个结点上升分出两个结点
具体可以参考https://www.cnblogs.com/vincently/p/4526560.html
B+树
B+树是对B-树的一次升级,它主要针对的是B-树在建立索引的时候,如果出现范围查找,就会导致索引失效,同时每个结点都要带数据,会导致额外的空间浪费,所以引出了B+树
他有以下的特性
- 所有的叶子结点都通过双向链表连接在一起
- 非叶子结点不存数据
- 数据和结点一样多