Ich habe in letzter Zeit viel gehört, dass ich mir den Ausführungsplan meines SQL ansehen sollte, um zu beurteilen, wie gut es funktionieren wird. Ich bin mir jedoch nicht wirklich sicher, wo ich mit dieser Funktion anfangen soll oder was genau das bedeutet.
Ich suche entweder nach einer guten Erklärung, was der Ausführungsplan macht, was seine Grenzen sind und wie ich ihn oder eine Richtung zu einer Ressource nutzen kann, die das tut.
Es beschreibt die tatsächlichen Algorithmen, mit denen der Server Ihre Daten abruft.
Eine SQL
Abfrage wie folgt:
, beschreibt was getan werden sollte, aber nicht wie es gemacht werden sollte.
Der Ausführungsplan zeigt wie : welche Indizes verwendet werden, welche Join-Methoden gewählt werden (verschachtelte Schleifen oder Hash Join oder Merge Join), wie die Ergebnisse gruppiert werden (mittels Sortierung oder Hashing), wie Sie sind bestellt usw.
Leider können selbst moderne SQL
Engines nicht automatisch die optimalen Pläne für mehr oder weniger komplexe Abfragen finden. Dennoch benötigt ein SQL
Entwickler die Abfragen so, dass sie performant sind (selbst wenn sie das tun, was die ursprüngliche Abfrage tut) ).
Ein klassisches Beispiel wären auch diese Abfragen:
%Vor%und
%Vor%, die dasselbe tun und theoretisch mit denselben Algorithmen ausgeführt werden sollten.
Jedoch wird keine tatsächliche Engine die vorherige Abfrage optimieren, um dieselben Algorithmen zu implementieren, d. e. Speichere einen Zähler in einer Variablen und inkrementiere ihn.
Es wird tun, was es zu tun hat: Zähle die Reihen immer und immer und immer wieder.
Um die Abfragen zu optimieren, müssen Sie tatsächlich sehen, was sich hinter den Kulissen abspielt, und genau das zeigen Ihnen die Ausführungspläne.
Vielleicht möchten Sie diesen Artikel in meinem Blog lesen:
Eine Möglichkeit, dies zu erleichtern, besteht darin, "Strg L" (Abfrage | Geschätzten Ausführungsplan anzeigen) für einige Ihrer Abfragen in SQL Management Studio zu verwenden.
Dies wird dazu führen, dass eine grafische Ansicht des Ausführungsplans angezeigt wird, die zu Beginn einfacher zu "entschlüsseln" ist als die Textversion davon.
Abfragen von Plänen in einem winzigen Wort :
Im Wesentlichen zeigt der Abfrageplan die Art und Weise, wie SQL Server beim Auflösen einer Abfrage verwendet werden soll.
Es gibt tatsächlich viele Möglichkeiten, sogar mit einfachen Abfragen.
Zum Beispiel, wenn es um einen JOIN geht, muss man entscheiden, ob man die [gefilterten] Zeilen von "Tabelle A" durchläuft und die Zeilen von "Tabelle B" sucht, oder zuerst "Tabelle B" durchläuft (das ist ein vereinfachtes Beispiel, da es viele andere Tricks gibt, die im Umgang mit JOINs verwendet werden können). In der Regel schätzt SQL die Anzahl der [gefilterten] Zeilen, die von beiden Tabellen erzeugt werden, und wählt die mit der kleinsten Zählung für die äußere Schleife aus (da dies die Anzahl der Suchen in der anderen Tabelle reduziert)
Ein anderes Beispiel ist, zu entscheiden, welche Indizes verwendet (oder nicht verwendet) werden sollen.
Es gibt viele Online-Ressourcen sowie Bücher, die die Abfragepläne detaillierter beschreiben. Die Schwierigkeit besteht darin, dass die SQL-Leistungsoptimierung ein sehr weites und komplexes Problem darstellt und viele dieser Ressourcen für Anfänger zu sehr ins Detail gehen ; Man muss zuerst die grundlegenden Prinzipien und Strukturen verstehen, die SQL Server zugrunde liegen (die Funktionsweise von Indizes, die Art und Weise, wie Daten gespeichert werden, den Unterschied zwischen geclusterten Indizes und Heaps ...), bevor man in viele davon eintaucht die [wichtigen] Details der Abfrageoptimierung. Es ist ein bisschen wie Baseball: zuerst müssen Sie die Regeln kennen, bevor Sie alle subtilen [und wichtigen] Konzepte in Bezug auf die Spielstrategie verstehen.
Siehe diese SO-Frage für zusätzliche Hinweise.
>Es ist ein sehr ernsthafter Teil des Wissens. Und dazu empfehle ich dringend spezielle Schulungen. Was mich nach der Woche auf Kursen anbetrifft, habe ich Leistung von Abfragen ungefähr 1000 Male ( Nostalgie )
erhöhtDer Ausführungsplan zeigt Ihnen, wie die Datenbank die für Ihre Abfrage erforderlichen Daten abruft, sortiert und filtert.
Zum Beispiel:
%Vor%Würde zu einem Ausführungsplan führen, der die Datenbank zeigt, die Datensätze von TableA und TableB abruft, sie abgleicht, um den JOIN zu erfüllen, die WHERE-Filterung und die ORDER BY-Sortierung.
Daraus können Sie herausfinden, was die Abfrage verlangsamt, ob es hilfreich wäre, Ihre Indizes zu überprüfen oder ob Sie die Dinge auf andere Weise beschleunigen können.
Tags und Links sql-server tsql sql-execution-plan