[英]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.