B树
二叉查找树:
平衡二叉树: 任何一个节点的左子树和右子树的高度差距不能超过1, 用的二分查找,所以时间复杂度就是O(logn)
所以当数据量暴增,就会有频繁的增删,树的结构形状可能会发生变化.
B Tree(如果每个节点最多有m个孩子,就称为m阶B树 )
包含 关键字 和 指向孩子的指针
决定因素: 每个存储块的容量 以及 数据库的 配置
B Tree 定义
-
根节点至少有两个孩子
-
🌲树中的每个节点最多含有m个孩子(m>=2)
-
除了根节点和叶子节点外,其他每个节点至少有ceil(m/2)个孩子
-
所有叶子节点都位于同一层
-
最后一个约束(关键字的个数比指针数少一个)
-
前四条主要是限制孩子的个数,还有深度;限制关键字的大小,为了查找的高效.
好处: 尽量让那个每个节点存储更多的数据,减少IO次数.
二叉树由于容易发生树形结构的偏移,但是B🌲有这五条规定,所以他会自动调节,这样效率不会改变(不会变成线性的 ).
B+ 树
B+树是B树的变体,其定义基本与B树相同,除了:
-
非叶子节点的子树指针与关键字个数相同
-
非叶子节点的子树指针P[i],指向关键字值(k[i],k[i+1])的子树
-
非叶子节点仅用来索引,数据都保存在叶子节点中
-
所有叶子节点均有一个链指针指向下一个叶子节点 (方便做范围统计)
B+ Tree 更适合做存储索引
-
B+树的磁盘读取代价更低
-
B+树的查询效率更加稳定
-
B+树更有利于对数据库的扫描(只需要遍历叶子节点)