【发布时间】:2021-08-26 17:48:44
【问题描述】:
我在 SQL Server 中有一个插入语句。
我尝试了一个较小的子集,速度很快
将数量增加到 100 万条记录,并且速度快 1 分 10 秒
现在我把它翻了一番,它似乎卡住了,它已经运行了 10 分钟,没有结果
我在 5 分钟时加入了计划。
https://www.brentozar.com/pastetheplan/?id=r15MPuC5u
也许有人可以告诉我如何改进这个过程。
PS。我在 Tag (RepID) 上添加了非聚集索引。
Tag(iiD) 是主键
Reps(RepID) 是主键。
在我写这篇文章的时候。过程于 11:47 结束
https://www.brentozar.com/pastetheplan/?id=HJd9uOCcu
这是我的代码
insert into R3..Tags (iID,DT,RepID,Tag,xmiID,iBegin,iEnd,Confidence,Polarity,Uncertainty,Conditional,Generic,HistoryOf,CodingScheme,Code,CUI,TUI,PreferredText,ValueBegin,ValueEnd,Value,Deleted,sKey,RepType)
SELECT T.iID,T.DT,T.RepID,T.Tag,T.xmiID,T.iBegin,T.iEnd,T.Confidence,T.Polarity,T.Uncertainty,T.Conditional,T.Generic,T.HistoryOf,T.CodingScheme,T.Code,T.CUI,T.TUI,T.PreferredText,T.ValueBegin,T.ValueEnd,T.Value,T.Deleted,T.sKey,R.RepType
FROM Recovery..tags T inner join Recovery..Reps R on T.RepID = R.RepID
where T.iID between 2000001 and 4000000
【问题讨论】:
-
“恢复”是链接服务器吗?
-
这些是由 3 部分组成的名称,因此它们都应该是当前实例中的数据库。做出假设,但
Recovery..tags与Recovery.dbo.tags相同——我们可以在计划细节中看到。执行计划说 200 万行,而不是 100 万行。 -
@SM 或者确切地说它们是同一个实例中的 3 个 DB。他们都住在我的笔记本电脑里
-
尝试获取并行插入,此时实际插入未并行化。可能需要跟踪标志 610,以及目标表上的
TABLOCK提示。见docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/… 也见sqlperformance.com/2019/05/sql-performance/…
标签: sql sql-server tsql sql-execution-plan