Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在表之间进行批量复制的最快方法_Sql_Sql Server 2008_Sqlbulkcopy - Fatal编程技术网

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

Sql 在表之间进行批量复制的最快方法,sql,sql-server-2008,sqlbulkcopy,Sql,Sql Server 2008,Sqlbulkcopy,我有一个包含列的SQL Server表,称它们为a和B。我创建了一个包含类型列和单值列的新表。我想将现有表中的所有行(有5000万行)复制到新表中,这样第一个表中的每一行在第二个表中有两行(一行用于值A,一行用于值B)。我有一个简单的脚本可以做到这一点 insert into NewTable (ResultTypeId, Value) (select @typeA, valueOfA from OldTable union all select @typeB, valueOfB from Ol

我有一个包含列的SQL Server表,称它们为a和B。我创建了一个包含类型列和单值列的新表。我想将现有表中的所有行(有5000万行)复制到新表中,这样第一个表中的每一行在第二个表中有两行(一行用于值A,一行用于值B)。我有一个简单的脚本可以做到这一点

insert into NewTable (ResultTypeId, Value)
(select @typeA, valueOfA from OldTable
union all
select @typeB, valueOfB from OldTable)
这种天真的方法大约需要8分钟。有没有更快的方法可以做到这一点?

要尝试的事情:

  • 分两步加载,而不是使用union。(1亿张唱片要在一次交易中推出实在是太多了。)
  • 在加载之前,不要在目标表上创建主键或索引
  • 使用大容量插入而不是
    插入到。。。选择
    。这里有一个开始:

  • 你能用SSIS做这个吗?这将把insert分割成更易于管理的块,因此整个insert没有一个事务。您还可以管理在插入过程中是否检查约束,禁用此项(只要您知道数据不违反约束)也将加快插入速度。是的,SSIS将允许您执行并行加载。如果服务器有大量的CPU和RAM,则使用方便。就我个人而言,我认为SSIS具有很大的学习曲线,并增加了额外的维护/可移植性问题,因此我很少使用它。SP或死亡是我的一般规则。。。