插入到从选择性能 SQL Server
Posted
技术标签:
【中文标题】插入到从选择性能 SQL Server【英文标题】:Insert Into From Select Performance SQL Server 【发布时间】:2016-12-14 08:28:46 【问题描述】:我创建了一个查询,我在其中将从其他表中选择的结果插入到一个空表中。
这个 select 本身需要 ~20 分钟(30 M 行、120 列和“Where”条件,这很好),但是 insert 进入需要 ~1 小时。
您对如何改进有什么建议吗?
我所做的如下例所示。
Insert Into tableA
Select *
From TableB
感谢您的帮助!
【问题讨论】:
【参考方案1】:删除 TableA
上的所有索引,然后再次插入:
INSERT INTO tableA
SELECT * FROM TableB
众所周知,索引会减慢插入语句的速度。
【讨论】:
您使用的是哪个 rdbms? mysql 还是 SQL 服务器? @Ric_R SQL 服务器。谢谢 阅读这里dba.stackexchange.com/questions/99367/…@Ric_R【参考方案2】:在已经提到的索引下,您可以检查 TableA 是否定义了约束(主键、外键等),因为约束通常由索引实现。
此外,您可以检查 TableA 上是否有触发器。 另一个测试是将 TableB 导出/卸载到文件,例如TableB.txt,然后将文件 TableB.txt 导入/加载到 TableA 中。 (对不起,我不知道 SQL Server 的语法)。
另一个要检查的项目可能是事务日志。可能可以将日志记录更改为 BULK_LOGGED 请参阅: Disable Transaction Log
【讨论】:
在执行SELECT
时不应触发约束和触发器。约束和触发器将仅在 DML 事件 (INSERT, UPDATE, DELETE
) 上运行。以上是关于插入到从选择性能 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章