这是一个概念问题,我只是从MS Access迁移到SQL Server以获得稳定性和可伸缩性。
我需要维护一个每天从另一台服务器提取的数据库。由于其他服务器上记录更改的可能性(和概率),我必须使用10天的滚动窗口,期望超过10天的任何内容都不会因策略而改变。
拉动是分阶段的,只获得初始传递中日期范围内的记录,然后一次移动到其他表中以提取相关和关系数据。
我编写了一个与日期范围变量一起使用的脚本。如果我将范围设置为10天,它会在大约8小时内完成所有操作。在测试中看看循环是否可能更好,让脚本循环从今天的-10开始,然后继续直到while<今天,3天需要16个小时。
新的,我很好奇为什么循环按日期方法慢得多的逻辑原因。我的想法是试图减轻对其他服务器的影响,但也许这在概念上并非如此。
在这两种情况下,代码都能完美地运行,唯一的区别是循环或一次性完成。
感谢您对此有任何见解!
答案 0 :(得分:0)
由于您从另一台服务器拔出,您可能正在使用链接服务器。此外,由于这是最直观的方式,你可能会做这样的事情:
select somefields
from ServerName.DatabaseName.Owner.TableName
where whatever
使用此语法,sql server首先将远程表的全部内容带到本地服务器,然后应用where子句。如果远程表有大量数据,则需要很长时间才能将其传输。
运行原始查询时,数据已传输一次。设置循环时,它被多次传输。这就是花费更多时间的原因。
要使用链接服务器加快生产速度,请使用openquery。