有没有办法评估 B+ 树所需的叶子数量?

Is there a way to evaluate the number of leaves needed by a B+-tree?

如果我有 t = #tuples(或#records)并且我唯一可以利用的其他信息是我的 B+ 树的扇出 F,有没有办法获得多少叶子(叶子的#blocks ) 树将需要?假设树必须是平衡的,因此尽可能地保持最多的信息 space。

示例:t = 40K,F = 40 ==> 深度 = log_40(40K) = 3,#leaves = ???

B+ tree 中,实际记录是从叶子中引用的。另一方面,内部节点不直接引用记录,而是定义键值的范围,以便遍历树到最终具有感兴趣记录键值的叶(块)。

B+树的另一个属性是一个内部节点的子节点数不仅有上限(即扇出F)还有下限绑定:F/2。 (我忽略了根不受此下限规则的约束)。这个1/2系数就是填充因子(0.5)。

叶块数 (L) 受记录数 (t) 和扇出数 (F),但顺便说一下,树是(不)平衡的。在最好的、最小的情况下,我们有:

min(L) = ⌈ t / F⌉

在最坏的情况下,我们有:

max(L) = ⌈ 2t / F⌉

如果你有不同的填充因子(c >= 0.5),那么最坏的情况是:

max(L) = ⌈ t / cF⌉

请注意,增加填充因子会减少使用 space,但会增加插入记录时的时间开销。当填充因子接近 1 时,space 使用率保持在最低限度,但更新速度会很慢。