改进INSERT INTO - FROM SELECT,SQL Query

Mel*_*sus 6 c# sql sql-server insert

目前我得到了这种由程序生成的查询(c#)

INSERT INTO TableName (Field1, Field2, Field3)
SELECT Field1, Field2, Field3 FROM TableName2
Run Code Online (Sandbox Code Playgroud)

问题是SELECT可能有许多记录的结果(如一百万),因此需要多次,结果是连接超时.

此外,如果我将所有插入分成单个插入(对于此示例,一百万个插入查询),执行需要很长时间......但它有效...

有没有办法可以改进这种类型的查询?

我使用MSSQl 2005

谢谢

Fre*_*els 8

我发现,如果你有很多按顺序执行的INSERT语句,你可以通过在每个xxxx数量的insert语句之后添加一个'GO'语句来提高性能:

...
INSERT INTO Table ( ... ) VALUES ( ... )
INSERT INTO Table ( ... ) VALUES ( ... )
INSERT INTO Table ( ... ) VALUES ( ... )
GO
INSERT INTO Table ( ... ) VALUES ( ... )
INSERT INTO Table ( ... ) VALUES ( ... )
...
Run Code Online (Sandbox Code Playgroud)

另一种可能性是,确保您的INSERT INTO .. SELECT FROM查询不会一次性插入所有内容,而是使用某种分页技术:

INSERT INTO Table ...
SELECT ...
FROM OtherTable WHERE Id > x and Id < y
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 6

好吧,如果它是一个完整的副本,我想知道你是否应该研究批量加载工具?

  • BULK INSERT(TSQL)
  • SqlBulkCopy(.NET)
  • bcp(命令行)
  • 等等

如果你一个Where条款,我会检查它是否适当编入索引......

另外:

  • 也许在执行INSERT之前删除索引和触发器(之后重新创建)
  • 考虑删除整个表并使用SELECT INTO?(看评论)