von Markus Winand.

Oracle Ausführungsplan-Operationen


Index- und Tabellenzugriffe

INDEX UNIQUE SCAN

Der INDEX UNIQUE SCAN durchwandert nur den Index-Baum. Die Oracle Datenbank verwendet diese Operation, wenn ein Constraint sicherstellt, dass maximal ein Eintrag das Abfragekriterium erfüllt. Siehe Kapitel 1, „Anatomie eines SQL Indexes.

INDEX RANGE SCAN

Der INDEX RANGE SCAN durchwandert den Indexbaum und folgt an­schlie­ßend der Blattknoten-Liste, um alle Treffer zu finden. Siehe Kapitel 1, „Anatomie eines SQL Indexes.

Die sogenannten Index-Filterprädikate sind ein häufiges Perfor­mance­problem beim INDEX RANGE SCAN. Der nächste Abschnitt erklärt, wie man sie erkennt.

INDEX FULL 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. In diesem Fall könnte der Optimizer auch einen INDEX FAST FULL SCAN auswählen und das Ergebnis im Anschluss sortieren. Siehe Kapitel 6, „Sortieren und Gruppieren.

INDEX FAST FULL SCAN

Liest den ganzen Index – alle Zeilen – wie gespeichert, das heißt, in „zufälliger“ Reihenfolge. Diese Operation wird anstatt eines Full-Table-Scans benutzt, wenn alle selektierten Spalten im Index vorhanden sind (Index-Only-Scan). Der INDEX FAST FULL SCAN liest die Index-Blöcke nicht einzeln, sondern mehrere auf einmal (multi-block read). Siehe Kapitel 5, „Daten-Cluster: Die zweite Macht der Indizierung.

TABLE ACCESS BY INDEX ROWID

Lädt eine Tabellenzeile anhand der ROWID aus einer vorangegangenen Index-Operation. Siehe Kapitel 1, „Anatomie eines SQL Indexes.

TABLE ACCESS FULL

Auch bekannt als Full-Table-Scan (FTS). 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 TABLE ACCESS FULL zu den teuersten Operationen überhaupt. Neben der Last am Speichersystem ist ein Full-Table-Scan auch sehr CPU-intensiv, da alle Tabellenzeilen gegen die where-Klausel geprüft werden müssen. Siehe auch Full-Table-Scan.

Hinweis in eigener Sache

Ich biete SQL Schulungen, Optimierung und Beratung an. Auch der Kauf meines Buches „SQL Performance Explained“ (ab €9,95) unterstützt meine Arbeit an dieser Webseite.

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. Siehe Nested Loops – verschachtelte Schleifen.

HASH JOIN

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 ORDER BY

Sortiert das Ergebnis entsprechend der order by-Klausel. Diese Operation benötigt Speicher zum Materialisieren des Zwischen­er­geb­nis (keine Ausführung „am Fließband“). Siehe ORDER BY indizieren.

SORT ORDER BY STOPKEY

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.

SORT GROUP BY

Sortiert und gruppiert das Ergebnis entsprechend der group by-Klausel. Diese Operation benötigt Speicher zum Materialisieren des Zwischenergebnisses (keine Ausführung „am Fließband“). Siehe GROUP BY indizieren.

SORT GROUP BY NOSORT

Gruppiert ein vorsortiertes Ergebnis entsprechend der group by-Klausel. Die Ausführung erfolgt „am Fließband“. Siehe GROUP BY indizieren.

HASH GROUP BY

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

Die Effizienz einer Top-N-Abfrage hängt von den abgebrochenen Ope­ra­ti­onen ab. Es ist sehr ineffizient, Operationen abzubrechen, die nicht „am Fließband“ ausgeführt werden (z. B. SORT ORDER BY).

COUNT STOPKEY

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

WINDOW NOSORT STOPKEY

Verwendet eine Window-Funktion (over-Klausel), um die Abfrage abzubrechen, sobald die gewünschte Anzahl an Zeilen gefunden wurde. Siehe Mit Window-Funktionen blättern.

Vorherige SeiteNächste Seite

Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Twitter 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»

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„Use The Index, Luke!“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO | CC-BY-NC-ND 3.0 Lizenz