当前位置:  开发笔记 > 编程语言 > 正文

改进INSERT INTO - FROM SELECT,SQL Query

如何解决《改进INSERTINTO-FROMSELECT,SQLQuery》经验,为你挑选了2个好方法。

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

INSERT INTO TableName (Field1, Field2, Field3)
SELECT Field1, Field2, Field3 FROM TableName2

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

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

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

我使用MSSQl 2005

谢谢



1> Frederik Ghe..:

我发现,如果你有很多按顺序执行的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 ( ... )
...

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

INSERT INTO Table ...
SELECT ...
FROM OtherTable WHERE Id > x and Id < y



2> Marc Gravell..:

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

BULK INSERT(TSQL)

SqlBulkCopy(.NET)

bcp(命令行)

等等

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

另外:

也许在执行INSERT之前删除索引和触发器(之后重新创建)

考虑删除整个表并使用SELECT INTO?(看评论)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有