Oracle Ausführungsplan-Operationen


Index- und Tabellenzugriffe

INDEX UNIQUE SCAN

Der INDEX UNQIUE 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“.

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

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