是否有理由在性能方面使用這些UPDATE語句之一而不是其他語句?SQL Server - 更新語句中的聯接或子查詢?
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)
是否有理由在性能方面使用這些UPDATE語句之一而不是其他語句?SQL Server - 更新語句中的聯接或子查詢?
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語句的每個變體都進行了測試。正如下面顯示的執行計劃,他們都出來了一樣 - 都執行相同的:
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
雖然這並不業績說話,我更喜歡第一個例子,這樣我就可以更輕鬆地對它進行審查,而無需更改代碼的基礎結構。注意我在評論中的位置和內容:
UPDATE myTable
SET fieldx = 1
--SELECT *
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id
我更喜歡這種語法。它更加明確。 – 2010-02-08 19:53:52