在SQL Server 2005中从小表批量复制到大表

| 我是SQL Server的新手,遇到以下难题: 我有两个结构相同的表。分别称为
runningTbl
finalTbl
。 “ 0”每15分钟包含大约60万至100万行。 在
runningTbl
中进行了一些数据清除之后,我想将所有记录移至
finalTbl
中。
finalTbl
当前大约有3800万行。 需要每15-20分钟重复一次上述过程。 问题是数据从
runningTbl
移到
finalTbl
的时间有时超过20分钟。 最初,当表很小时,要花10秒钟到2分钟的时间进行复制。 现在只需要太长时间。 有谁可以协助您?遵循的SQL查询 谢谢     
已邀请:
为了获得最有效的复制数据方法,您需要做很多事情。到目前为止,您走在正确的道路上,但是您还有很长的路要走。我建议您先查看索引。可能有一些优化可以提供帮助。接下来,请确保该表上没有可能导致速度降低的触发器。接下来,更改日志记录级别(如果可以更改)。 这里还有很多其他帮助(来自Microsoft): http://msdn.microsoft.com/zh-CN/library/ms190421(v=SQL.90).aspx 基本上,您使用BCP的位置正确。这实际上是微软的建议:   要将数据从一个SQL Server实例批量复制到另一个实例,请使用bcp将表数据导出到数据文件中。然后,使用一种批量导入方法将数据从文件导入表中。使用本机或Unicode本机格式执行批量导出和批量导入操作。 但是,在执行此操作时,还需要考虑如果引入的数据过多(取决于您使用的索引类型),则可能会删除索引。如果您使用聚集索引,则在导入之前对数据进行排序也是一个好主意。这是更多信息(包括以上引用的来源): http://msdn.microsoft.com/zh-CN/library/ms177445(v=SQL.90).aspx     
对于初学者:多年来我学到的一件事是,MSSQL在优化各种操作方面做得很好,但是这样做很大程度上依赖于所涉及的所有表的统计信息。因此,我建议在运行实际的插入操作之前先运行\“ UPDATE STATISTICS created_logs \”&\“ UPDATE STATISTICS unprocessed_logs \”;即使在大桌子上,这些东西也不会花很长时间。 除此之外,基于上面的查询,很大程度上取决于目标表的索引。我假设目标表在(至少)UnixTime上具有其聚集索引(或PRIMARY KEY),否则,当您在现有记录之间挤压越来越多的数据时,将创建主要的数据碎片。要解决此问题,您可以尝试偶尔对目标表进行碎片整理(可以在线完成,但需要很长时间),但是要创建聚集索引(或PK),以便始终将数据附加到表末尾成为更好的方法;好吧,至少在我看来。     
我建议您应该有一个窗口服务,并使用计时器和一个布尔变量。将您的请求发送到服务器后,将bool设置为高位,并且在该事件为低位之前,timer事件不应执行代码。     

要回复问题请先登录注册