表中的SQL更新防止重复性能

时间:2018-01-03 21:20:40

标签: sql sqlperformance

我正在尝试使用来自其他两个表的键更新连接表。连接表(TableC)已经填充了TableA中的数百万个键。如下查询在不到两分钟的时间内更新所有行(非常可接受);但是,在存在类似行的情况下,每行应唯一匹配。 (TableB中的键不应在TableC中重复 - TableA中的每个记录都应与TableB中的唯一记录匹配。)

UPDATE TableC
SET TableC.TableBkey = b.TableBkey
FROM TableC AS c
INNER JOIN TableA AS a ON a.TableAkey = c.TableAkey
INNER JOIN TableB AS b ON b.col1 = a.col1 AND b.col2 = a.col2 AND b.col3 = a.col3
WHERE c.TableBkey IS NULL

这使得查询无限期地运行而不更新任何记录;可能联接未能完成。

AND NOT EXISTS (SELECT TOP 1 TableBkey FROM TableC AS x WHERE x.TableBkey = b.TableBkey)

是否有任何其他方法可以限制TableB中的重复键而不会破坏性能?我宁愿不使用触发器。

1 个答案:

答案 0 :(得分:0)

试试这个:

UPDATE TableC
SET TableC.TableBkey = b.TableBkey
FROM TableC AS c
INNER JOIN TableA AS a ON a.TableAkey = c.TableAkey
INNER JOIN (select * from TableB 
            LEFT JOIN TableC ON TableB.tableBkey = TableC.tableBkey
            WHERE TableC.TableBkey is null )
AS b ON b.col1 = a.col1 AND b.col2 = a.col2 AND b.col3 = a.col3
WHERE c.TableBkey IS NULL