Was sind SQL-Ausführungspläne und wie können sie mir helfen?

8

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.

    
Daniel 29.01.2010, 15:19
quelle

7 Antworten

4

Es beschreibt die tatsächlichen Algorithmen, mit denen der Server Ihre Daten abruft.

Eine SQL Abfrage wie folgt:

%Vor%

, 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:

Quassnoi 29.01.2010, 15:25
quelle
2

Hier und Hier sind einige Artikel überprüfen Sie es. Mit Ausführungsplänen können Sie den Bereich ermitteln, der zeitaufwendig ist und Ihnen somit ermöglicht, Ihre Abfrage zu verbessern.

    
Vinay Pandey 29.01.2010 15:25
quelle
1
  1. Ein Ausführungsplan zeigt genau, wie SQL Server eine Abfrage verarbeitet
  2. es wird als Teil des Abfrageoptimierungsprozesses von SQL Server erstellt. Es ist nicht etwas, das du direkt erstellst.
  3. es wird zeigen, welche Indizes es am besten verwendet werden soll, und im Grunde ist ein Plan, wie SQL Server eine Abfrage verarbeitet
  4. Der Abfrageoptimierer nimmt eine Abfrage, analysiert sie und erstellt möglicherweise verschiedene Ausführungspläne. Es ist ein kostenbasierter Optimierungsprozess, und es wird denjenigen auswählen, der seiner Meinung nach der Beste ist.
  5. Sobald ein Ausführungsplan erstellt wurde, wird er in den Plancache übernommen, so dass nachfolgende Aufrufe für dieselbe Abfrage den gleichen Plan erneut verwenden können, um zu vermeiden, die Arbeit wiederholen zu müssen, um einen Plan zu erstellen.
  6. Ausführungspläne werden automatisch aus dem Cache gelöscht, abhängig von ihrem Wert (Pläne mit geringem Wert werden entfernt, bevor die Pläne mit hohem Wert ausgeführt werden, um einen maximalen Leistungszuwachs zu erzielen)
  7. Ausführungspläne helfen Ihnen, Performance-Probleme zu erkennen, z. B. wo Indizes fehlen
AdaTheDev 29.01.2010 15:30
quelle
1

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.

>     
mjv 29.01.2010 15:25
quelle
1

Hier ist eine großartige Quelle, die Ihnen hilft, sie zu verstehen Ссылка

Das kommt von red-gate, einem Unternehmen, das großartige SQL Server-Tools entwickelt, es ist kostenlos und es lohnt sich, es herunterzuladen und zu lesen.

    
HLGEM 29.01.2010 15:53
quelle
0

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öht     
Sergey Mirvoda 29.01.2010 15:26
quelle
0

Der 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.

    
Fenton 29.01.2010 15:31
quelle