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 )
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top