就性能而言,是否有理由使用其中一个 UPDATE 语句而不是另一个?
UPDATE myTable
SET fieldx = 1
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id
UPDATE myTable
SET fieldx = 1
WHERE id IN ( SELECT id
FROM myView )
就性能而言,是否有理由使用其中一个 UPDATE 语句而不是另一个?
UPDATE myTable
SET fieldx = 1
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id
UPDATE myTable
SET fieldx = 1
WHERE id IN ( SELECT id
FROM myView )
他们可能会得出相同的执行计划,这意味着没有区别。要确认,只需打开“包括执行计划”选项在 SSMS 中尝试每一项。
事实上,我会选择的是:
UPDATE mt
SET mt.fieldx = 1
FROM myTable mt
JOIN myView mv ON mt.ID = mv.ID
我更喜欢这种语法。不过,它也会有相同的执行计划。
为了证明这一点,我对 UPDATE 语句的每个变体进行了测试。正如下面的执行计划所示,它们的结果都是一样的——都执行相同的:
alt text http://img707.imageshack.us/img707/7801/60422461.png
虽然这与性能无关,但我更喜欢第一个示例,这样我可以在不更改代码底层结构的情况下更轻松地审查它。注意我在评论中的位置和内容:
UPDATE myTable
SET fieldx = 1
--SELECT *
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id