TSQL-Optimierung des Ausführungsplans

Ich habe eine SQL-statement (die ich hier nicht posten kann). Wenn ich auf seinen Ausführungsplan schaue, sehe ich die meiste time in Sorten sitzen, gefolgt von Index-Scans.

Gibt es irgendetwas, was ich tun kann, um die time zu verzehren? ein Index irgendwelcher Art? Alles was ich tun kann, um die in den Index-Scans verbrachte time zu vermindern?

Bildbeschreibung hier eingeben

Der gruppierte Index-Scan ist im Wesentlichen ein Tabellen-Scan, bei dem jede Zeile in der Tabelle untersucht wird.

Sie vermissen vermutlich einen Index auf dieser Tabelle für diese Abfrage … schauen Sie sich die Felder an, die Sie filtern, indem Sie sich anschließen und Hinzufügen von Hinweisen zu diesen Spalten hinzufügen.

Diese Indizes werden wahrscheinlich auch die verschachtelten Loop / Sort-Operationen verhindern.

Ich frage mich nur hier laut, aber hast du irgendwelche Rangfunktionen, die an deiner Abfrage beteiligt sind? Ich frage, weil ich sehe Betreiber direkt nach der Art und ich normalerweise sehen, wenn ich etwas wie ROW_NUMBER () oder RANK (). Alle diese Betreiber benötigen eine Bestellung in der OVER-Klausel, also, wenn Ihre data nicht bereits von dieser Metrik bestellt werden (dh es ist nicht so geordnet auf dem Tisch / Index, dass die data aus gezogen werden), dann der Motor wird die data sortieren müssen, um das richtige Ergebnis zu erhalten.

Zuerst einmal, wenn Sie möchten, dass die Menschen Sie ernst nehmen, und vor allem, wenn Sie genaue Antworten und Hilfe von Ihnen Fragen wollen, dann müssen Sie bestimmte Informationen enthalten. Wenn jemand ihnen helfen wird, brauchen sie genügend Informationen, um in der Lage zu sein, Ihre Bedingungen zu reproduzieren, damit sie selbst überprüfen, was der Vorschlag eigentlich tatsächlich hilft. Glaub es oder nicht, die Leute, die reagieren, sind so toll (thannk an alle, die helfen), dass sie normalerweise testing, was sie sagen. Wenn Sie Code-Restriktionen haben, weil seine Arbeit verwandt ist. Sie sollten genug Verständnis haben, um ein ähnliches Beispiel mit anderen Tabellen und Spalten erstellen zu können, um das Problem zu zeigen, ohne den Code zu beeinträchtigen.

Zu dem Punkt, die Samples machen die folgenden 1) Nested Loop: 2) Sortieren

In diesem Fall wird der SORT durchgeführt, weil das Ergebnis der (Nested Loop) nicht so wie es benötigt wird. Daß die Quelle der (verschachtelten loop) die obere Tabelle (Clustered Index Scan) ist, wird in der Reihenfolge der (Clusted Inex Key) gelesen, die offensichtlich nicht die gleiche wie die BENÖTIGTE SORT ist.

Wenn das Feld, das tatsächlich auf ss Teil eines KEY eines INDEX sortiert wird und alle benötigten Spalten der Abfrage im Index eingeschlossen sind, dann sollte es einen "Index Scan" auf dem Index verwenden, der ALREADY von der bestellt werden sollte ORDER BY KEY und der SORT könnte vermieden werden.

Ich lief einige Tests auf diesem und anscheinend SQL server DOES verwenden den Index (wie erwartet), aber STILL führt die SORT (nicht so expected seit der datastrom BEREITS SORTIERT). Dies könnte etwas sein, das an MS gemeldet werden sollte, da der Optimierer dies erkennen sollte.

Hoffe das hilft..