查询保持不变,即保持不变。
例如,如果选择查询返回10000行,则它需要30分钟。
如果同一个查询必须返回20000行,它会花费1小时吗?
我有兴趣了解no之间的数学关系。行数(N)和执行时间(T) 即T=N*K或 T=N*K+C或 还有其他配方吗? 阅读http://research.microsoft.com/pubs/76556/progress.pdf如果有帮助的话。任何能在我之前理解这一点的人,请务必回复。谢谢
这是个好问题:),但没有确切的公式,因为它取决于执行计划。
SQL查询优化器可以对返回不同行数的查询选择另一个执行计划。我想,如果两个查询的查询执行计划相同,并且您有一些"实验室"条件,那么时间增长可能是线性的。您应该更多地研究sql执行计划和统计
举一个非常简单的例子,读取单个表中的每一行。
在最坏的情况下,您将不得不从底层存储中读取表的每一页。最糟糕的情况是必须进行随机搜索。搜索时间将主导所有其他因素。所以你可以估计总时间。
time ~= seek time x number of data pages
假设您的行具有相当规则的大小,那么这在行数上是线性的。
然而,数据库做了很多事情来尝试和避免这种最坏的情况。例如,在SQL Server中,表存储通常以8个连续页面的范围进行分配。硬盘驱动器的流式IO速率比随机IO速率快得多。如果你有一个集群索引,按集群顺序读取页面往往比随机IO有更多的流式IO。
忽略内存缓存的最佳情况是(8KB是SQL Server页面大小)
time ~= 8KB * number of data pages / streaming IO rate in KB/s
这在行数上也是线性的。
只要你在管理碎片方面做得合理,你就可以在这个简单的例子中合理地线性推断。这是假设您的数据比缓冲区缓存大得多。如果没有,您还必须担心悬崖边缘,在那里您的查询从从缓冲区读取变为从磁盘读取。
我还忽略了并行存储路径和访问等细节。