von Markus Winand.

Operationen in SQL Server Ausführungsplänen


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. SQL Server 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.

Wenn du diese Seite magst, magst du vielleicht auch …

… meine Newsletter bestellen, gratis Sticker erhalten, mein Buch kaufen oder an einer Schulung teilnehmen.

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

Vorherige SeiteNächste Seite

Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2010-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO