在表之间批量复制的最快方法

时间:2014-02-14 10:45:24

标签: sql sql-server-2008 sqlbulkcopy

我有一个带有列的SQL Server表,将它们称为A和B.我创建了一个带有类型列和单个值列的新表。我想将现有表中的所有行(有5000万个)复制到新表中,这样第一个表中的每一行在第二个表中都有2行(一个用于值A,一个用于值B)。我有一个简单的脚本可以执行此操作

insert into NewTable (ResultTypeId, Value)
(select @typeA, valueOfA from OldTable
union all
select @typeB, valueOfB from OldTable)

这种天真的方法大约需要8分钟。有更快的方法吗?

1 个答案:

答案 0 :(得分:1)

要尝试的事情:

  1. 分两步加载,而不是使用union。 (在一次交易中推行1亿条记录非常多。)
  2. 在加载之前,不要在目标表上创建主键或索引。
  3. 使用批量插入而不是insert into ... select。这是一个开始的地方:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/b2b59376-e039-485b-84ef-613122a043f0/bcp-or-bulk-insert-why?forum=transactsql