从选择性能SQL Server插入

monwx1rj  于 2023-01-08  发布在  SQL Server
关注(0)|答案(3)|浏览(144)

我创建了一个查询,在其中将从其他表中选择的结果插入到一个空表中。
这个select本身需要**~20分钟**(30 M行,120列和"Where"条件,这很好),但是insertinto需要**~1小时**。
你有什么改进的建议吗?
我所做的是在下面的例子。

Insert Into tableA
Select *
From TableB

感谢您的帮助!

64jmpszr

64jmpszr1#

删除TableA上的所有索引,然后再次插入:

INSERT INTO tableA
SELECT * FROM TableB

众所周知,索引会降低插入语句的速度。

sf6xfgos

sf6xfgos2#

在已经提到的索引下面,您可以检查TableA是否定义了约束(主键、外键等),因为约束通常由索引实现。
此外,您可以检查TableA上是否有触发器。另一个测试是将TableB导出/卸载到一个文件(例如TableB.txt),然后将文件TableB.txt导入/加载到TableA。(抱歉,我不知道SQL Server的语法)。
另一个要检查的项目可能是事务日志。可能可以将日志记录更改为BULK_LOGGED,请参阅:Disable Transaction Log

py49o6xq

py49o6xq3#

最好的方法是删除表,这样做会更快Select * INTO TableB from tableA还提到here

相关问题