数据库中B树索引的空间复杂性

时间:2013-05-03 02:37:52

标签: database algorithm data-structures b-tree space-complexity

传统的B树实现具有O(n)空间复杂度[1]。

所以假设在一个数据库中(不管实现,只考虑一般情况),我有一个10GB数据表,目前索引大小是1GB,所以我可以假设如果数据库增长到100GB,我的索引大小将是10GB?

1 个答案:

答案 0 :(得分:2)

无论实施如何,你都不能说什么。

如果索引是一个纯B树,那么理论上应该在被索引的键的数量和大小上是线性的,并且填充率有一些软糖因子。但是,它不太可能是纯粹的B树。首先,它可能是B +树或其他变体。 B +树会在大小计算中添加一个非常小的对数项。这种增加不大可能是重要的。更重要的是,大多数实现都没有实现理论B树操作来维持填充率。例如,删除可以仅通过留下将由后面的插入使用的开放槽来实现。在大量操作和运气不好的情况下,索引表示的效率会降低,因此索引可能会变大。如果您的10GB索引包装紧凑且100GB是在运行一年后,则可能比您预期的要大。

直接回答你的问题 - 不,我不认为你的假设是安全的。更多因为索引可能会随着时间的推移而改变大小,而不是基础数据结构中的非线性。