我需要关于如何分解这个查询的建议,所以它不会那么慢。我一直在阅读 EXISTS 和 UNION 但我不确定如何在这种情况下使用它们。LineA/B/C 都是 nvarchar(max),我无法将连接更改为文本以外的其他内容。不幸的是,必须这样做。
UPDATE n SET AddressID = a.AddressID
FROM #NewAddress n
JOIN dbo.Address a
ON (a.[LineA] = n.[LineA] OR (a.[LineA] is null AND n.[LineA] is null))
AND (a.[LineB] = n.[LineB] OR (a.[LineB] is null AND n.[LineB] is null))
AND (a.[LineC] = n.[LineC] OR (a.[LineC] is null AND n.[LineC] is null))
WHERE n.Processed = 0
关于如何 UNION 或 EXISTs 这个查询的任何想法?这似乎是我遇到的一个很常见的连接条件
我不确定如何发布查询计划,但它真的很小这样
SELECT 0% <---- Hash Match (Inner Join) 75% <------- Clustered Index Scan 0%
<------- Clustered Index Scan 25%
这些行都没有索引,因为它们是 nvarchar(max)。我也无法索引 dbo.Address
- 解决
我在#NewAddress 的Processed 列中添加了一个索引。显然,这是缓慢的部分