Operationen in SQL Server Ausführungsplänen


Diese Seite für

Die Referenz in der Microsoft Dokumentation: http://technet.microsoft.com/de-de/library/ms191158.aspx

Index- und Tabellenzugriffe

Die Operationsnamen folgen bei SQL Server einem einfachen Schema. Alle „Scan“-Operationen lesen den gesamten Index oder die gesamte Tabelle. Die „Seek“-Operationen benutzen den Index-Baum oder die physikalische Adresse (RID, wie die Oracle ROWID), um auf einen Bereich gezielt zuzu­grei­fen.

Index Seek, Clustered Index Seek

Die Operation Index Seek durchwandert den Indexbaum und folgt anschließend der Blattknoten-Liste, um alle Treffer zu finden (analog zu einem INDEX RANGE SCAN in der Oracle Datenbank). Siehe Kapitel 1, „Anatomie eines SQL Indexes.

Die sogenannten Index-Filterprädikate sind ein häufiges Performance­pro­blem bei der Index Seek-Operation. „Zugriffs- und Filterprädikate unterscheiden“ erklärt, wie man sie identifiziert.

Index Scan, Clustered Index Scan

Liest den ganzen Index – alle Zeilen – in der Index-Reihenfolge. Diese Operation kann zum Beispiel dann benutzt werden, wenn alle Zeilen in der entsprechenden Reihenfolge benötigt werden – z. B., weil die order by-Klausel der Indexdefinition entspricht. Siehe Kapitel 6, „Sortieren und Gruppieren.

Key Lookup (Clustered)

Lädt eine Zeile aus einem Clustered-Index. Ähnlich einem INDEX UNIQUE SCAN auf einer Index-Organized-Table (IOT) bei der Oracle Datenbank. Siehe auch Kapitel 5, „Daten-Cluster: Die zweite Macht der Indizierung.

RID Lookup (Heap)

Lädt eine Tabellenzeile anhand der RID aus einer vorangegangenen Index-Operation. Ähnlich der Operation TABLE ACCESS BY INDEX ROWID bei der Oracle Datenbank. Siehe Kapitel 1, „Anatomie eines SQL Indexes.

Table Scan

Liest die ganze Tabelle – alle Zeilen – wie gespeichert. Das heißt, in „zufälliger“ Reihenfolge. Obwohl die Blöcke nicht einzeln, sondern mehrere auf einmal gelesen werden, gehört der Table Scan zu den teuersten Operationen überhaupt. Neben der Last am Speichersystem ist er auch sehr CPU-intensiv, da alle Tabellenzeilen gegen die where-Klausel geprüft werden müssen. Analog zu TABLE ACCESS FULL bei der Oracle Datenbank. Siehe „Full-Table-Scan“.

Bei unseren Schlulungs-, Tuning-, und
Literaturangeboten ist für jeden was dabei

Join-Operationen

Join-Operationen verbinden grundsätzlich nur zwei Tabellen auf einmal. Falls mehrere Join-Operationen in einer Abfrage vorkommen, werden sie schrittweise durchgeführt; zuerst zwei Tabellen, dann das Zwischen­er­geb­nis mit der nächsten. Insofern kann der Begriff „Tabelle“ im Folgenden auch ein Zwischenergebnis bezeichnen.

Nested Loops

Verbindet zwei Tabellen, indem es für jede Zeile aus der ersten Tabelle eine Abfrage auf die zweite macht. SQL Server nutzt den Nested-Loops Join auch für den Tabellenzugriff nach einem Indexzugriff. Siehe „Nested Loops – verschachtelte Schleifen“.

Hash Match

Ein Hash-Join lädt die möglicherweise passenden Zeilen aus der einen Tabelle in ein assoziatives Array (Hash-Table), das dann für jede Zeile der zweiten Tabelle abgefragt wird. Siehe „Hash-Join“.

Merge Join

Der Merge-Join verbindet zwei Tabellen wie ein Reißverschluss. Beide Tabellen müssen vorsortiert sein. Siehe „Sort-Merge“.

Sortieren und Gruppieren

Sort

Sortiert das Ergebnis entsprechend der order by-Klausel. Diese Operation benötigt Speicher, um das Ergebnis zwischenzuspeichern (keine pipelined execution). Siehe auch ORDER BY indizieren“.

Sort (Top N Sort)

Sortiert ein Teilergebnis entsprechend der order by-Klausel. Diese Operation wird für Top-N-Abfragen genutzt, die nicht „am Fließband“ ausgeführt werden können. Siehe „Top-N-Zeilen abfragen“.

Stream Aggregate

Gruppiert ein vorsortiertes Ergebnis entsprechend der group by-Klausel. Die Ausführung erfolgt „am Fließband“. Falls der Operation aber ein Sort vorausgeht, erfolgt dieses nicht „am Fließband“. Siehe GROUP BY indizieren“.

Hash Match (Aggregate)

Führt eine Gruppierung mit einer Hash-Tabelle durch. Diese Operation benötigt Speicher zum Materialisieren des Zwischenergebnisses (keine Ausführung „am Fließband“). Die Ausgabe erfolgt in keiner bestimmten Reihenfolge. Siehe GROUP BY indizieren“.

Top-N-Abfragen

Top

Bricht die Ausführung ab, sobald die gewünschte Anzahl an Zeilen gefunden wurde. Siehe „Top-N-Zeilen abfragen“.

Die Effizienz einer Top-N-Abfrage hängt vom den abgebrochenen Operationen ab. Es ist sehr ineffizient, Operationen abzubrechen, die nicht „am Fließband“ ausgeführt werden (z. B. Sort).

Über den Autor

Photo of Markus Winand
Markus Winand stimmt Entwickler auf SQL-Performance ein. Er hat das Buch SQL Performance Explained veröffentlicht und bietet inhouse Schulungen sowie Tuning-Leistungen auf http://winand.at/ an.