von Markus Winand.

Sortieren und Gruppieren


Sortieroperationen sind sehr Ressourcen-intensiv. Zum einen benötigen sie verhältnismäßig viel CPU-Zeit. Das Hauptproblem ist aber, dass das Ergebnis zwischengespeichert werden muss. Schließlich müssen erst alle Zeilen gelesen werden, bevor die Erste ausgegeben werden kann. Eine Sortieroperation kann also nicht „am Fließband“ (pipelined) ausgeführt werden. Das kann bei großen Datenmengen zum Problem werden.

Ein Index stellt eine sortierte Kopie der indizierten Daten zur Verfügung. Dieses Funktionsprinzip wurde bereits in Kapitel 1 beschrieben. Man könnte auch sagen, dass ein Index die Daten vorsortiert abspeichert. Und zwar so, als würde man die Indexdefinition in eine order by-Klausel übernehmen. Es ist also naheliegend, dass man Indizes auch für order by-Klauseln verwenden kann.

Hinweis in eigener Sache

Ich lebe von SQL-Schulungen, SQL-Tuning und Beratung sowie dem Verkauf meines Buches „SQL Performance Explained“. Mehr auf winand.at.

Doch gerade bei großen Datenmengen kann ein INDEX RANGE SCAN ebenfalls ineffizient sein. Das kann den Vorteil, dass die explizite Sortierung ent­fällt, zunichtemachen. Ein Full-Table-Scan mit expliziter Sortierung kann dann immer noch besser sein. Es liegt also wieder am Optimizer, die verschiedenen Ausführungspläne zu bewerten und den besten auszu­wählen.

Eine indizierte order by-Ausführung spart aber nicht nur den Sortierauf­wand, sondern kann die ersten Ergebnisse bereits liefern, bevor die Ein­gangsdaten vollständig gelesen wurden. Das order by wird also „am Fließband“ ausgeführt (pipelined execution). Kapitel 7, „Teilergebnisse, zeigt, wie man ein „pipelined order by“ nutzen kann, um Blätterabfragen effizient umzusetzen. Dadurch wird das pipelined order by so mächtig, dass ich es als die „dritte Macht der Indizierung“ bezeichne.

Beachte

Das Durchwandern des Baumes ist die „erste Macht der Indizierung“.

Clustering ist die „zweite Macht der Indizierung“.

Pipelined order by ist die „dritte Macht der Indizierung“.

Dieses Kapitel zeigt, wie man einen Index für ein pipelined order by nutzt. Dabei sind insbesondere die Wechselwirkungen mit der where-Klausel, aber auch ASC- und DESC-Spezifikationen, zu beachten. Abschließend wird noch erklärt, wie man diese Methoden auf group by-Klauseln anwendet.

Inhalt

  1. Indexed Order By — im Zusammenspiel mit der where-Klausel

  2. ASC/DESC und NULLS FIRST/LAST — die Indexreihenfolge ändern

  3. Indexed Order By — Gruppierung am „Fließband“

Vorherige SeiteNächste Seite

Über den Autor

Foto von Markus Winand

Markus Winand ist der SQL Renaissance Botschafter auf der Mission, Entwickler auf die Evolution von SQL im 21. Jahrhundert aufmerksam zu machen. 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»

Nicht mit OFFSET blättern

Mehr info

Besuche meine Schwester-Seite!Seit SQL-92 hat sich einiges getan!

Die Use The Index, Luke! Tasse

Aufkleber, Bierdeckel, Bücher und Kaffeetassen. Alles was man beim Lernen braucht!

Zum Shop

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