我创建了一个查询,在其中将从其他表中选择的结果插入到一个空表中。这个select本身需要**~20分钟**(30 M行,120列和"Where"条件,这很好),但是insertinto需要**~1小时**。你有什么改进的建议吗?我所做的是在下面的例子。
Insert Into tableA Select * From TableB
感谢您的帮助!
64jmpszr1#
删除TableA上的所有索引,然后再次插入:
TableA
INSERT INTO tableA SELECT * FROM TableB
众所周知,索引会降低插入语句的速度。
sf6xfgos2#
在已经提到的索引下面,您可以检查TableA是否定义了约束(主键、外键等),因为约束通常由索引实现。此外,您可以检查TableA上是否有触发器。另一个测试是将TableB导出/卸载到一个文件(例如TableB.txt),然后将文件TableB.txt导入/加载到TableA。(抱歉,我不知道SQL Server的语法)。另一个要检查的项目可能是事务日志。可能可以将日志记录更改为BULK_LOGGED,请参阅:Disable Transaction Log
py49o6xq3#
最好的方法是删除表,这样做会更快Select * INTO TableB from tableA还提到here
Select * INTO TableB from tableA
3条答案
按热度按时间64jmpszr1#
删除
TableA
上的所有索引,然后再次插入:众所周知,索引会降低插入语句的速度。
sf6xfgos2#
在已经提到的索引下面,您可以检查TableA是否定义了约束(主键、外键等),因为约束通常由索引实现。
此外,您可以检查TableA上是否有触发器。另一个测试是将TableB导出/卸载到一个文件(例如TableB.txt),然后将文件TableB.txt导入/加载到TableA。(抱歉,我不知道SQL Server的语法)。
另一个要检查的项目可能是事务日志。可能可以将日志记录更改为BULK_LOGGED,请参阅:Disable Transaction Log
py49o6xq3#
最好的方法是删除表,这样做会更快
Select * INTO TableB from tableA
还提到here