簡體   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