插入到从选择性能 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的主要内容,如果未能解决你的问题,请参考以下文章

选择查询和聚合函数的 SQL Server 性能改进

从 SQL Server 中的选择查询错误插入

在sql server中插入和选择数据

Microsoft SQL Server 从选择查询插入

工作高峰时段的 Sql Server 批量插入

在特定文本值 SQL Server 之后选择行