SQL Server - unire o subquery nelle istruzioni di aggiornamento?
-
19-09-2019 - |
Domanda
C'è un motivo per usare una di queste istruzioni UPDATE sopra l'altro per quanto riguarda le prestazioni?
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 )
Soluzione
Essi probabilmente escono con lo stesso piano di esecuzione, significa che non c'è alcuna differenza. Per confermare, basta provare ciascuno in SSMS con l'opzione "Includi piano di esecuzione" acceso.
In realtà, quello che vorrei andare per è:
UPDATE mt
SET mt.fieldx = 1
FROM myTable mt
JOIN myView mv ON mt.ID = mv.ID
preferisco di gran lunga questa sintassi. Però, anche uscirà con lo stesso piano di esecuzione.
A dimostrazione di ciò, ho fatto un test con ogni variante dell'istruzione UPDATE. Come l'esecuzione in programma sotto esposizione, sono venuti tutti fuori lo stesso - tutti svolgono la stessa:
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
Altri suggerimenti
Anche se questo non parla di prestazioni, mi piace il primo esempio meglio così che ho potuto veterinario più facile senza modificare la struttura di base del codice. Avviso dove e quello che ho messo nei commenti:
UPDATE myTable
SET fieldx = 1
--SELECT *
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id