3

就性能而言,是否有理由使用其中一个 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 )
4

2 回答 2

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


替代文字 http://img683.imageshack.us/img683/7874/41210682.png


替代文字 http://img708.imageshack.us/img708/5020/20506532.png

于 2010-02-08T19:45:21.727 回答
0

虽然这与性能无关,但我更喜欢第一个示例,这样我可以在不更改代码底层结构的情况下更轻松地审查它。注意我在评论中的位置和内容:

UPDATE myTable 
SET    fieldx = 1
--SELECT *
FROM   myTable AS mt 
      , myView AS mv 
WHERE  mt.id = mv.id
于 2010-02-08T19:58:14.043 回答