von Markus Winand.

Alles, was Entwickler über SQL Performance wissen müssen


  1. Vorwort — Warum Entwickler indizieren müssen

  2. Anatomie eines Indexes — Wie sieht ein SQL Index aus?

    1. Die Blätter — Eine doppelt verkettete Liste

    2. Der B-Tree — Ein ausbalancierter Baum

    3. Langsame Indizes, Teil I — Zwei Zutaten machen den Index langsam

  3. Die Where-Klausel — Die Suchgeschwindigkeit verbessern

    1. Der Gleicheheitsoperator — Exakte Bedingungen

      1. Primärschlüssel — Indexnutzung kontrollieren

      2. Zusammengesetzte Schlüssel — Mehrspaltige Indizes

      3. Langsame Indizes, Teil II — Die erste Zutat, nochmals

    2. Funktionen — Funktionen in der where-Klausel

      1. Groß- und Kleinschreibung ignorierenUPPER und LOWER

      2. Benutzerdefinierte Funktionen — Grenzen der Indizierbarkeit

      3. Über-Indizierung — Vermeide Redundanzen

    3. Parametrisierte Abfragen — Für Sicherheit und Performance

    4. Nach Bereichen Suchen — Jenseits der Gleichheit

      1. Größer, Kleiner und BETWEEN — Beachte die Spaltenreihenfolge

      2. SQL LIKE Filter IndizierenLIKE ist keine Volltextsuche

      3. Indizes kombinieren — Warum nicht einen Index für jeder Spalte?

    5. Partielle Indizes — Ausgewählte Zeilen indizieren

    6. NULL in der Oracle Datenbank — Eine wichtige Kuriosität

      1. NULL im Index — Jeder Index ist ein partieller Index

      2. NOT NULL Constraints — beeinflussen die Indexnutzung

      3. Partielle Indizes emulieren — mit funktions-basierter Indizierung

    7. Verstümmelte Bedingungen — Verbreitete Anti-Pattern

      1. Datums-Typen — verursachen viele Probleme

      2. Numerische Strings — Mische die Typen nicht

      3. Spalten zusammenfügen — und redundante where-Klauseln

      4. Schlaue Logik — Der schlauste Weg SQL langsam zu machen

      5. Mathematik — Datenbanken lösen keine Gleichungen

  4. Performance und Skalierbarkeit — Über Hardware

    1. Das Datenvolumen — Schlampige Indizierung schlägt zurück

    2. Die Systemlast — Die Zugriffsrate beeinflusst die Antwortzeit

    3. Antwortzeit und Durchsatz — Horizontale Skalierbarkeit

  5. Die Join Operation — Nicht unbedingt langsam

    1. Nested Loops – verschachtelte Schleifen — Das ORM N+1 Problem

    2. Hash Join — Benötigt eine völlig andere Indizierung

    3. Sort-Merge Join ‌— Wie ein Zipverschluss auf sortierten Daten

  6. Daten-Cluster — Daten Zusammenlegen: die zweite Macht

    1. Index-Filterprädikate gezielt einsetztenLIKE tunen

    2. Index-Only Scan – Den Tabellenzugriff vermeiden

    3. Index-organisierte Tabellen – Clustered Indizes ohne Tabelle

  7. Sortieren und Gruppieren — Pipelined order by: die dritte Macht

    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“

  8. Teilergebnisse — Effizientes blättern

    1. Top-N Zeilen abfragen — wenn man nur die ersten paar Zeilen braucht

    2. Die nächste Seite laden — die Offset- und Seek-Methoden im Vergleich

    3. Window-Funktionen — mit analytischen Funktionen blättern

  9. Insert, Delete und Update — Wie sich Indizierung auf DML auswirkt

    1. Insert — kann keinen direkten Nutzen aus Indizierung ziehen

    2. Delete — nutzt Indizes für die where-Klausel

    3. Update — betrifft nicht alle Indizes der Tabelle

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.

  1. Ausführungspläne — Ausführungspläne holen und lesen

    1. DB2 LUW : ErstellenOperationenZugriffs- und Filterprädikate

    2. MySQL : ErstellenOperationenZugriffs- und Filterprädikate

    3. Oracle : ErstellenOperationenZugriffs- und Filterprädikate

    4. PostgreSQL : ErstellenOperationenZugriffs- und Filterprädikate

    5. SQL Server : ErstellenOperationenZugriffs- und Filterprädikate

    6. SQLite: ErstellenOperationen

  2. Mythen-Verzeichnis — Verbreitete Mythen und Irrglauben

    1. Indizes können degenerieren

    2. Selektivste Spalte zuerst

    3. Oracle kann NULL nicht Indizieren

    4. Dynamisches SQL ist langsam

  3. Beispiel SchemaCREATE und INSERT Skripts

  4. Glossar — Die wichtigsten Datenbankbegriffe kurz erklärt

Ü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