是否有理由在性能方面使用其中一个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 )
答案 0 :(得分:5)
他们可能会提出相同的执行计划,这意味着没有区别。要确认,只需在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
alt text http://img683.imageshack.us/img683/7874/41210682.png
alt text http://img708.imageshack.us/img708/5020/20506532.png
答案 1 :(得分:0)
虽然这不符合性能,但我更喜欢第一个例子,这样我就可以在不改变代码的底层结构的情况下更轻松地审查它。请注意我在评论中的位置和内容:
UPDATE myTable
SET fieldx = 1
--SELECT *
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id