数据库查询时间如何随数据库大小而变化?

时间:2011-02-11 20:45:12

标签: database time-complexity oeis

我最近最近在OEIS(整数序列在线百科全书)上试图查找我曾经拥有的特定序列。

现在,这个数据库相当大。该网站指出,如果打印2006年(!5岁)版本,它将占用750卷文本。

我确信这也是谷歌必须处理的同类问题。但是,他们也有一个分布式系统,他们利用负载平衡。

忽略负载平衡但是,与数据库大小相比,执行查询需要多长时间?

或者换句话说,查询关于数据库大小的时间复杂度是多少?

编辑:为了使事情更具体,假设输入查询只是查找一串数字,例如:

1, 4, 9, 16, 25, 36, 49

3 个答案:

答案 0 :(得分:3)

它在很大程度上取决于查询,数据库结构,争用等。但一般来说,大多数数据库都会找到使用索引的方法,并且该索引将是某种树结构(对于一个选项,请参见http://en.wikipedia.org/wiki/B-tree),在这种情况下,访问时间与log(n)成比例,或者否则就是一个散列,在这种情况下,访问时间平均与O(1)成正比(有关它们如何工作的解释,请参阅http://en.wikipedia.org/wiki/Hash_function#Hash_tables。)

所以答案通常是O(1)或O(log(n)),具体取决于使用的数据结构类型。

这可能会让您想知道为什么我们不总是使用哈希函数。原因有很多。散列函数使得检索值范围变得困难。如果散列函数未能很好地分配数据,则访问时间可能变为O(n)。哈希需要偶尔调整大小,这可能非常昂贵。并且log(n)增长得足够慢,您可以将其视为在所有实际数据集中合理接近常量。 (从1000到1PB,它变化了5倍。)并且经常主动请求的数据显示某种类型的位置,哪些树在保持RAM方面做得更好。结果树在实践中更常见。 (虽然哈希并不罕见。)

答案 1 :(得分:1)

这取决于许多因素,包括数据库引擎实现,索引策略,查询细节,可用硬件,数据库配置等。

没有办法回答这样的一般性问题。

答案 2 :(得分:0)

正确设计和实现的数据库包含数TB的数据实际上可能胜过设计糟糕的小型数据库(特别是没有索引的数据库和使用性能不佳的非可搜索查询和相关子查询之类的数据库)。这就是为什么任何期望拥有大量数据的人都需要聘请大型数据库的数据库设计专家来进行初始设计,而不是在数据库很大时。您可能还需要投资处理尺寸所需的设备类型。