SQL Server - juntar ou subconsulta em instruções de atualização?
-
19-09-2019 - |
Pergunta
Existe uma razão para usar uma dessas instruções UPDATE sobre o outro com relação ao desempenho?
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 )
Solução
Eles provavelmente vai sair com o mesmo plano de execução, ou seja, não há diferença. Para confirmar, basta tentar cada um em SSMS com a opção "Incluir Plano de Execução" ligado.
Na verdade, o que eu gostaria de ir para é:
UPDATE mt
SET mt.fieldx = 1
FROM myTable mt
JOIN myView mv ON mt.ID = mv.ID
Eu prefiro muito mais essa sintaxe. Porém, ele também vai sair com o mesmo plano de execução.
Para demonstrar isso, eu corri um teste com cada variante da instrução UPDATE. Como os planos de execução abaixo mostram, todos eles saiu o mesmo - todos executam a mesma:
texto alt http://img707.imageshack.us/img707/7801/60422461.png
texto alt http://img683.imageshack.us/img683/7874/41210682.png
texto alt http://img708.imageshack.us/img708/5020/20506532.png
Outras dicas
Não Enquanto isso faz falar com o desempenho, eu como o primeiro exemplo melhor para que eu pudesse vet mais fácil sem alterar a estrutura subjacente do código. Aviso onde eo que eu coloquei em comentários:
UPDATE myTable
SET fieldx = 1
--SELECT *
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id