von Markus Winand.

Online-Buch zu indexbasiertem SQL Tuning


Eine Anleitung zu SQL Indizierung und SQL Tuning für Entwickler: keine unnötigen Details zu Datenbankinterna.

SQL Indizierung ist die effektivste SQL Tuning Methode und bedarf derselben Sorgfalt wie das Schema-Design. Dennoch wird es während der Entwicklung meist vernachlässigt. Use The Index, Luke erklärt SQL Indizierung aus Sicht des Quelltexts und geht dabei auch auf ORM Werkzeuge wie Hibernate oder Doctrine ein.

Use The Index, Luke! ist in Wirklichkeit ein echtes Buch: es ist die Online-Ausgabe von SQL Performance Explained. Wenn dir diese Seite gefällt, denk daran das Buch zu kaufen—damit unterstützt du die Arbeit an dieser Seite!

SQL Indizierung in MySQL, Oracle, SQL Server,…

SQL Indizierung ist herstellerunabhängig. Der Haupttext des Buches verwendet jedoch nur die Oracle-Begriffe, damit die Lesbarkeit erhalten bleibt. Produktspezifika werden wie folgt dargestellt:

DB2

Use The Index, Luke deckt SQL Indizierung von IBM DB2 Datenbanken ab. Die Beispiele wurden auf DB2 für Linux, UNIX und Windows, V10.5 bis 11.1 getestet.

MySQL

Use The Index, Luke deckt SQL Indizierung von MySQL Datenbanken ab. Die Beispiele wurden unter MySQL 5.5 bis 8.0 getestet.

Oracle

Use The Index, Luke deckt SQL Indizierung von Oracle Datenbanken ab. Die Beispiele wurden unter Oracle 11g und 12c getestet.

PostgreSQL

Use The Index, Luke deckt SQL Indizierung von PostgreSQL Datenbanken ab. Die Beispiele wurden mit PostgreSQL 9.0 bis 9.6 getestet.

SQL Server

Use The Index, Luke deckt SQL Indizierung für Microsoft SQL Server ab. Die Beispiele wurden mit SQL Server 2008R2 bis 2017 getestet.

Noch Fragen? Kein Problem – auf winand.at findest du alles über meine Schulungs- und Beratungsleistungen.

Inhaltsverzeichnis

  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

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

Sein Buch bei Amazon kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Bei Amazon kaufen
(Taschenbuch)

Taschenbuch und PDF auch auf Markus' Webseite erhältlich.

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

„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