23 tree, 234 tree, B tree, B+tree, B*tree
- 二叉树的问题是当数据量多时, 容易产生海量节点, 会直接引起树的高度变大, 导致整体性能下降. 此种情况的解决方案就是多路查找树, 简称多叉树
概述
- B树(B tree, Balanced tree), 属于多叉树(节点的路径可能不止两个), 它通过重新组织节点, 降低树的高度, 且减少 I/O次数来提升效率. B树广泛应用于文件存储系统以及数据库系统中
- B树的阶是节点的最多子节点个数, 如23树的阶是3, 234的阶是4
- B树的搜索, 从根节点开始, 对节点内的关键字序列进行二分查找, 如果命中则结束, 否则进入查询关键字所属范围的儿子节点, 依次重复, 直到所对应的儿子指针为空或已经是叶子节点
- 关键字集合分布在整棵树中, 即叶子节点和非叶子节点都存放数据
23树& 234树(23 tree& 234 tree)
- 23树是最简单的 B树结构, 具有如下特点:
- 23树的所有叶子节点都在同一层
(所有的 B树结构都满足此条件)
- 有两个子节点的节点叫二节点, 二节点要么没有子节点, 要么有两个子节点
- 有三个子节点的节点叫三节点, 三节点要么没有子节点, 要么有三个子节点
- 23树是由二节点和三节点构成的树
* 234树也是 B树结构, 特点与23树类似, 只是多了四节点
B+树(B+tree)
- B+树是 B树的一个升级版
- B+树和 B树的搜索基本相同, 区别是 B+树只在到达叶子节点时, 才会命中. 而 B树是可以在非叶子节点命中
- 所有关键字都存在叶子节点上的, 叶子节点相当于是存储关键字的数据层
- 非叶子节点相当于是叶子节点的索引(稀疏索引)
B树(Btree)
- B*树是B+树的变种
- B*树定义了非叶子节点关键字个数至少为(2/3)M, 即块的最低使用率为2/3, 而 B+树的块最低使用率为 B+树的1/2. 也就是 B树分配新节点的概率比 B+树要低, 空间使用率更高
- B+树节点满时就会分裂, 而 B*树节点满时会检查兄弟节点是否满, 如果兄弟节点未满则向兄弟节点转移关键字, 如果兄弟节点已满,则从当前节点和兄弟节点各拿出1/3的数据创建一个新的节点出来
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!