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 anschließ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 Performanceproblem 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 einenINDEX 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 diewhere
-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 Zwischenergebnis 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 Zwischenergebnis (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 Operationen 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“.