Question

Y at-il une raison d'utiliser l'une de ces instructions UPDATE sur l'autre en ce qui concerne la performance?

 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 )
Était-ce utile?

La solution

Ils vont probablement sortir avec le même plan d'exécution, ce qui signifie qu'il n'y a aucune différence. Pour confirmer, essayez chacun dans SSMS avec l'option « Inclure le plan d'exécution » activée.

En fait, celui que je pencherais pour est:

UPDATE mt
SET mt.fieldx = 1
FROM myTable mt
    JOIN myView mv ON mt.ID = mv.ID

Je préfère de beaucoup cette syntaxe. Bien que, elle aussi viendra avec le même plan d'exécution.

Pour démontrer cela, j'ai couru un test avec chaque variante de l'instruction UPDATE. Comme l'exécution des plans ci-dessous montrent, ils sont tous venus le même - tous effectuer les mêmes:
texte alt http://img707.imageshack.us/img707/7801/60422461.png


texte alt http://img683.imageshack.us/img683/7874/41210682.png


texte alt http://img708.imageshack.us/img708/5020/20506532.png

Autres conseils

Bien que cela ne parle pas à la performance, j'aime le premier exemple mieux pour que je puisse plus facilement vétérinaire sans changer la structure sous-jacente du code. Remarquez où et ce que je mets dans les commentaires:

UPDATE myTable 
SET    fieldx = 1
--SELECT *
FROM   myTable AS mt 
      , myView AS mv 
WHERE  mt.id = mv.id
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top