Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum wird in meinem Ausführungsplan eine Sortierung angezeigt?

SQL Server hat drei Algorithmen zur Auswahl, wenn zwei Tabellen verknüpft werden müssen. Der Nested-Loops-Join, der Hash-Join und der Sort-Merge-Join. Welche es auswählt, basiert auf Kostenschätzungen. In diesem Fall stellte sich heraus, dass aufgrund der verfügbaren Informationen ein Sort-Merge-Join die richtige Wahl war.

In SQL Server-Ausführungsplänen wird ein Sort-Merge in zwei Operatoren aufgeteilt, den Sort und den Merge-Join, da der Sortiervorgang möglicherweise nicht erforderlich ist, beispielsweise wenn die Daten bereits sortiert sind.

Weitere Informationen zu Joins finden Sie in meiner Join-Serie hier:http://sqlity.net/en/1146/a-join-a-day-introduction/ Den Artikel über den Sort-Merg-Join finden Sie hier:http://sqlity.net/en/1480/a-join-a-day-the-sort-merge-join/

Um Ihre Abfrage zu beschleunigen, würde ich zuerst Indizes betrachten. Sie haben eine Reihe von Clustered-Index-Scans in der Abfrage. Wenn Sie einige von ihnen durch Suchen ersetzen können, werden Sie höchstwahrscheinlich besser dran sein. Überprüfen Sie auch, ob die von SQL Server erstellten Schätzungen mit den tatsächlichen Zeilenzahlen in einem tatsächlichen Ausführungsplan übereinstimmen. Wenn sie weit entfernt sind, trifft SQL Server oft schlechte Entscheidungen. Die Bereitstellung besserer Statistiken kann Ihnen also auch bei der Abfrageleistung helfen.