繁体   English   中英

“不”之间的数学关系是什么? SQL查询的“受影响的行数”和“执行时间”?

[英]What is the mathematical relationship between “no. of rows affected” and “execution time” of a sql query?

查询保持不变,即它将保持不变。

例如,如果选择查询返回10000行,则需要30分钟。

如果必须返回20000行,同一查询将花费1个小时吗?

我有兴趣知道之间的数学关系 行数(N)执行时间(T)保持其他参数不变(K)。

即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。

忽略内存缓存的最佳情况是(SQL Server页面大小为8KB)

time ~= 8KB * number of data pages / streaming IO rate in KB/s

行数也是线性的。

只要您能合理地管理碎片管理,就可以在这种简单情况下合理地线性推断。 假设您的数据远大于缓冲区缓存。 如果不是这样,您还必须担心查询从缓冲区读取变为从磁盘读取的悬崖边缘。

我也忽略了诸如并行存储路径和访问之类的细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM