代码之家  ›  专栏  ›  技术社区  ›  Chris Burgess

SQL Server-在更新语句中加入或子查询?

  •  3
  • Chris Burgess  · 技术社区  · 14 年前

    在性能方面,是否有理由使用这些更新语句中的一个而不是另一个?

     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 )
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   AdaTheDev    14 年前

    他们可能会拿出相同的执行计划,这意味着没有区别。要确认,只需在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

        2
  •  0
  •   Yoav    14 年前

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

    UPDATE myTable 
    SET    fieldx = 1
    --SELECT *
    FROM   myTable AS mt 
          , myView AS mv 
    WHERE  mt.id = mv.id