效率 - 循环大于其部分的总和?

时间:2014-01-24 13:17:58

标签: sql sql-server tsql sql-server-2012 processing-efficiency

这是一个概念问题,我只是从MS Access迁移到SQL Server以获得稳定性和可伸缩性。

我需要维护一个每天从另一台服务器提取的数据库。由于其他服务器上记录更改的可能性(和概率),我必须使用10天的滚动窗口,期望超过10天的任何内容都不会因策略而改变。

拉动是分阶段的,只获得初始传递中日期范围内的记录,然后一次移动到其他表中以提取相关和关系数据。

我编写了一个与日期范围变量一起使用的脚本。如果我将范围设置为10天,它会在大约8小时内完成所有操作。在测试中看看循环是否可能更好,让脚本循环从今天的-10开始,然后继续直到while<今天,3天需要16个小时。

新的,我很好奇为什么循环按日期方法慢得多的逻辑原因。我的想法是试图减轻对其他服务器的影响,但也许这在概念上并非如此。

在这两种情况下,代码都能完美地运行,唯一的区别是循环或一次性完成。

感谢您对此有任何见解!

1 个答案:

答案 0 :(得分:0)

由于您从另一台服务器拔出,您可能正在使用链接服务器。此外,由于这是最直观的方式,你可能会做这样的事情:

select somefields
from ServerName.DatabaseName.Owner.TableName
where whatever

使用此语法,sql server首先将远程表的全部内容带到本地服务器,然后应用where子句。如果远程表有大量数据,则需要很长时间才能将其传输。

运行原始查询时,数据已传输一次。设置循环时,它被多次传输。这就是花费更多时间的原因。

要使用链接服务器加快生产速度,请使用openquery。