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

  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

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