SQL Server - unirse o subconsulta en las instrucciones de actualización?
-
19-09-2019 - |
Pregunta
¿Hay una razón para usar una de estas instrucciones UPDATE sobre el otro en cuanto a rendimiento?
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 )
Solución
probablemente van a salir con el mismo plan de ejecución, es decir, no hay ninguna diferencia. Para confirmar, sólo tratar cada uno en SSMS con la opción "Incluir plan de ejecución" encendido.
De hecho, el que me gustaría ir a es:
UPDATE mt
SET mt.fieldx = 1
FROM myTable mt
JOIN myView mv ON mt.ID = mv.ID
Me gusta mucho más esta sintaxis. Sin embargo, también saldrá con el mismo plan de ejecución.
Para demostrar esto, me encontré con una prueba con cada variante de la instrucción UPDATE. A medida que la ejecución de los planes a continuación muestran, salieron todos de la misma - todos realizan la misma:
alt texto http://img707.imageshack.us/img707/7801/60422461.png
alt texto http://img683.imageshack.us/img683/7874/41210682.png
alt texto http://img708.imageshack.us/img708/5020/20506532.png
Otros consejos
Si bien esto no habla de rendimiento, me gusta el primer ejemplo mejor manera que pude veterinario que sea más fácil sin necesidad de cambiar la estructura subyacente del código. Observe dónde y lo que he puesto en los comentarios:
UPDATE myTable
SET fieldx = 1
--SELECT *
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id