B-Tree 和 B+Tree详解
一、什么是B-Tree
B-Tree又叫做B树,和平衡二叉树不同的地方在于B树是多叉树(平衡多路查找树),Oracle和MongoDB的索引技术就是基于B树的数据结构,B树也可以看作是对查找树的一种扩展。
一个m阶的B-Tree有以下性质:
- 每个节点最多有m个子节点
- 每个非叶子节点(根节点除外)至少含有m/2个子节点
- 如果根节点不是叶子节点,那么根节点至少有两个子节点
- 每个节点上,所有的关键字都是有序的,从左到右,依次从小到大排序
- 每个关键字的左子树的均值小于当前关键字,右子树的均值大于当前关键字
- 每个节点都存有索引和数据
- 对于一个非叶子节点而言,它最多能存储m-1个关键字
- 所有叶子节点位于同一层
1.B-树插入
对于一个m阶B树,新节点一般是插在叶子层,但是需要根据实际的情况考虑是否需要裂变。
- 若该节点中关键码个数小于m-1,则直接插入
- 若该节点中关键字个数等于m-1,则将进行分裂,以中间关键字为界点将节点一分为2,产生一个新的节点,并把中间那个关键字插入到父节点中,继续判断父节点的关键字个数是否等于m-1,依次判断是否分裂,最坏情况下可一直分裂到根节点,整个树增加一层。 <