以下查询导致 SQL Server 2014 TEMPDB.MDF 增长到 40Gb,运行大约需要一个小时。
NVARCHAR(MAX)
对不需要几分钟的列的类似查询。
正在更新的表大约有 700 万行。
添加AND C.SQLStmt IS NOT NULL
到最后改善了这一点。
任何帮助,将不胜感激。
UPDATE R
SET R.SQLStmt = C.SQLStmt
FROM SampleResults R
JOIN SampleTests T ON T.SampleCode = R.SampleCode
AND T.TestPosition = R.TestPosition
JOIN TestComponents C ON T.TestCode = C.TestCode
AND T.TestVersion = C.AuditNumber
AND R.ComponentColumn = C.ComponentColumn
AND R.ComponentRow = C.ComponentRow
WHERE T.AuditFlag = 0
AND R.AuditFlag = 0
AND C.SQLStmt IS NOT NULL
这是从这个问题开始的,我没有足够的声誉来评论。
执行计划是:
Update
Cost: 0%
|
Cluseterd Index Updated
[SampleResults].[pk_SampleResults]
Cost: 27%
|
Top
COST: 0%
|
Sort
(Distinct Sort)
Cost: 31%
|
Nested Loops Index Seek (NonClustered)
(Inner Join) - [SampleTests].[SampleTestsAuditFlag...
Cost: 0% Cost: 10%
|
Nested Loops Key Lookup (Clustered)
(Inner Join) - [SampleResults].[pk_SampleResults]...
Cost: 0% Cost: 15%
|
Nested Loops Index Seek (NonClustered)
(Inner Join) - [SampleResults].[SampleResultsCompo...
Cost: 0% Cost: 9%
|
Filter
Cost: 0%
|
Clustered Index Scan (Clustered)
[TestComponents].[pk_TestComponents...
Cost: 9%