繁体   English   中英

SQL Server - 更新语句中的连接或子查询?

[英]SQL Server - join or subquery in update statements?

有没有理由在性能方面使用其中一个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语句的每个变体运行了一个测试。 正如下面的执行计划所示,它们都是相同的 - 都表现相同:
替代文字http://img707.imageshack.us/img707/7801/60422461.png


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


alt text http://img708.imageshack.us/img708/5020/20506532.png

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM