使用多个更新或内部连接对性能更好



我有以下更新语句,我在触发器中使用具有相同的行为,两者都是正确的,但第二个有问题,如果我同时更新tableA_ID和ValueB。但这不是大问题,因为有工作,但如果可能的话,我想避免它。所以我想知道的是这两个之间是否有很大的差别这会让我决定选哪一个。如果第二辆的性能比第二辆好得多,我会用第二辆。但如果差别不是很大,我就用第一个。我不是sql server的专家。有人能帮忙吗?

UPDATE tableA
SET tableA.Value = tableA.Value - old.ValueB
FROM tableA
INNER JOIN (
SELECT tableA_ID ,ValueB
FROM deleted
) old ON old.tableA_ID = tableA.ID
UPDATE tableA
SET tableA.Value = tableA.Value + new.ValueB
FROM tableA
INNER JOIN (
SELECT tableA_ID ,ValueB
FROM inserted
) new ON new.tableA_ID = tableA.ID
UPDATE tableA
SET tableA.Value = tableA.Value - old.ValueB + new.ValueB
FROM tableA
INNER JOIN (
SELECT tableA_ID ,ValueB
FROM deleted
) old ON old.tableA_ID = tableA.ID
INNER JOIN (
SELECT tableA_ID ,ValueB
FROM inserted
) new ON new.tableA_ID = tableA.ID

与任何事情一样,请进行测试以确定。

是否应该在触发器中这样做是一个很长的讨论。

在性能方面,在大多数情况下,使用第二个查询,您将看到更好的性能。我可以简单地说明这一点的原因是,您只查看查询中UPDATE的单个查找,其中一次更新所有内容。然而,第一个查询必须找到要更新的数据,两次。

但是,再测试一下。

是的,正如@SMor在评论中所说,为什么你需要这个作为触发器绝对应该讨论。触发器可能被严重误用和滥用。

最新更新