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.5 getestet.
- MySQL
Use The Index, Luke deckt SQL Indizierung von MySQL Datenbanken ab. Die Beispiele wurden unter MySQL 5.5 bis 8.0.32 getestet.
- Oracle
Use The Index, Luke deckt SQL Indizierung von Oracle Datenbanken ab. Die Beispiele wurden unter Oracle 11g bis 21c getestet.
- PostgreSQL
Use The Index, Luke deckt SQL Indizierung von PostgreSQL Datenbanken ab. Die Beispiele wurden mit PostgreSQL 9.0 bis 15 getestet.
- SQL Server
Use The Index, Luke deckt SQL Indizierung für Microsoft SQL Server ab. Die Beispiele wurden mit SQL Server 2008R2 bis 2019 getestet.
Noch Fragen? Kein Problem – auf winand.at findest du alles über meine Schulungs- und Beratungsleistungen.
Inhaltsverzeichnis
Vorwort — Warum Entwickler indizieren müssen
Anatomie eines Indexes — Wie sieht ein SQL Index aus?
Die Blätter — Eine doppelt verkettete Liste
Der B-Tree — Ein ausbalancierter Baum
Langsame Indizes, Teil I — Zwei Zutaten machen den Index langsam
Die Where-Klausel — Die Suchgeschwindigkeit verbessern
Der Gleicheheitsoperator — Exakte Bedingungen
Primärschlüssel — Indexnutzung kontrollieren
Zusammengesetzte Schlüssel — Mehrspaltige Indizes
Langsame Indizes, Teil II — Die erste Zutat, nochmals
Funktionen — Funktionen in der
where
-KlauselGroß- und Kleinschreibung ignorieren —
UPPER
undLOWER
Benutzerdefinierte Funktionen — Grenzen der Indizierbarkeit
Über-Indizierung — Vermeide Redundanzen
Parametrisierte Abfragen — Für Sicherheit und Performance
Nach Bereichen Suchen — Jenseits der Gleichheit
Größer, Kleiner und
BETWEEN
— Beachte die SpaltenreihenfolgeSQL
LIKE
Filter Indizieren —LIKE
ist keine VolltextsucheIndizes kombinieren — Warum nicht einen Index für jeder Spalte?
Partielle Indizes — Ausgewählte Zeilen indizieren
NULL
in der Oracle Datenbank — Eine wichtige KuriositätNULL
im Index — Jeder Index ist ein partieller IndexNOT NULL
Constraints — beeinflussen die IndexnutzungPartielle Indizes emulieren — mit funktions-basierter Indizierung
Verstümmelte Bedingungen — Verbreitete Anti-Pattern
Datums-Typen — verursachen viele Probleme
Numerische Strings — Mische die Typen nicht
Spalten zusammenfügen — und redundante
where
-KlauselnSchlaue Logik — Der schlauste Weg SQL langsam zu machen
Mathematik — Datenbanken lösen keine Gleichungen
Performance und Skalierbarkeit — Über Hardware
Das Datenvolumen — Schlampige Indizierung schlägt zurück
Die Systemlast — Die Zugriffsrate beeinflusst die Antwortzeit
Antwortzeit und Durchsatz — Horizontale Skalierbarkeit
Die Join Operation — Nicht unbedingt langsam
Nested Loops – verschachtelte Schleifen — Das ORM N+1 Problem
Hash Join — Benötigt eine völlig andere Indizierung
Sort-Merge Join — Wie ein Zipverschluss auf sortierten Daten
Daten-Cluster — Daten Zusammenlegen: die zweite Macht
Index-Filterprädikate gezielt einsetzten —
LIKE
tunenIndex-Only Scan – Den Tabellenzugriff vermeiden
Index-organisierte Tabellen – Clustered Indizes ohne Tabelle
Sortieren und Gruppieren — Pipelined
order by
: die dritte MachtIndexed Order By — im Zusammenspiel mit der
where
-KlauselASC
/DESC
undNULLS FIRST
/LAST
— die Indexreihenfolge ändernIndexed Order By — Gruppierung am „Fließband“
Teilergebnisse — Effizientes blättern
Top-N Zeilen abfragen — wenn man nur die ersten paar Zeilen braucht
Die nächste Seite laden — die Offset- und Seek-Methoden im Vergleich
Window-Funktionen — mit analytischen Funktionen blättern
Insert, Delete und Update — Wie sich Indizierung auf DML auswirkt