/ / Comment fonctionne TSQL Merge? Performance par rapport à UPDATE et INSERT - sql, sql-server, performance, tsql, sql-server-2012

Comment fonctionne TSQL Merge? Performances contre UPDATE et INSERT - sql, sql-server, performance, tsql, sql-server-2012

Quelqu'un peut-il m'aider à comprendre comment fonctionne la fusion TSQL? et aidez-moi à comprendre quand UPDATE / INSERT sera plus rapide et quand MERGE sera plus rapide?

Je sais que c'est une question très vague et non liée à un cas particulier sur lequel je travaille. J'espère que cela est autorisé sur StackOverflow.

Si vous pouvez me donner des liens pertinents, cela fonctionnera également. Merci.

Merci de me signaler à: SQL Server: performances MERGE mais j'estime que cela est davantage lié aux index qu'à la fusion et, par conséquent, ma question ne fait pas double emploi avec cela.

Réponses:

1 pour la réponse № 1

Les implémentations de fusion font un full outer join sur la source et la cible. En fonction des clauses ayant un effet secondaire que vous avez spécifiées, cela peut être réduit à des jointures plus faciles telles que des jointures à gauche ou internes.

À partir du résultat de la jointure, il y a des calculs scalairesopérateurs qui calculent quelle action est supposée se produire et quelles valeurs vont être utilisées. Ce résultat est transmis à un opérateur qui écrit.

C'est très simplifié. La différence par rapport au DML normal est presque égale à zéro si vous spécifiez une seule clause ayant des effets secondaires. Cela montre que la fusion n'a pas d'inconvénient de performance inhérent.

En fait, il présente un avantage en ce sens qu'il ne doit transmettre les données qu'une seule fois. Souvent, la fusion est plus rapide que plusieurs déclarations faisant la même chose.

  • L'optimiseur peut voir tous les DML à la fois
  • Un passage sur les données au lieu d'un par instruction
  • Toutes les écritures d'index sont triées par clé d'index. Mieux vaut le faire une fois plutôt que plusieurs fois
  • Frais généraux par déclaration seulement une fois

Il peut utiliser un peu plus de processeur si vous utilisez la fusion de manière à ne tirer parti d'aucun de ces points.

Les performances dépendent vraiment du schéma, de la forme de la fusion et des données. Je peux vous construire des cas où la fusion est légèrement plus lente et des cas où elle est beaucoup plus rapide.