physar / Datenbankadministration für Sysadmins / Indizes und Ausführungspläne

Indizes und Ausführungspläne

Warum eine Abfrage langsam ist: Selektivität, Zugriffspfad und Statistiken lesen, bevor Indizes ergänzt werden — und was jeder zusätzliche Index im Schreibbetrieb kostet.

Erst den Plan lesen, dann den Index bauen

Einführung · 5 Abschnitte · ~15 Min Lesezeit · Stand

Betriebsfrage

„Die Abfrage ist langsam, wir brauchen einen Index“ ist die häufigste und die am seltensten belegte Aussage im Datenbankbetrieb. Der Ausführungsplan sagt, ob sie stimmt — und meistens sagt er etwas anderes.

Mentales Modell

  1. Abfrage
  2. Statistiken
  3. Planwahl
  4. Zugriffspfad
  5. Ergebnis

Die Datenbank wählt den Zugriffspfad anhand geschätzter Zeilenzahlen. Sind die Statistiken veraltet, ist die Schätzung falsch — und der Plan optimal für eine Datenmenge, die es nicht mehr gibt.

Wann ein Index hilft

Hohe SelektivitätDie Bedingung trifft einen kleinen Teil der Zeilen. Dann lohnt der Umweg über den Index.
Niedrige SelektivitätDie Bedingung trifft einen großen Teil. Ein vollständiger Durchlauf ist dann meist schneller — der Index wird zu Recht ignoriert.
Sortierung und BereichEin Index kann eine Sortierung oder einen Bereichszugriff mitliefern; die Spaltenreihenfolge im Index entscheidet darüber.

Was Indizes kosten

  • Jeder Index wird bei jedem Einfügen, Ändern und Löschen mitgepflegt — Schreibvorgänge werden langsamer.
  • Indizes belegen Speicher und verlängern Sicherung und Wiederherstellung.
  • Ungenutzte Indizes kosten dauerhaft, ohne je einen Zugriff zu beschleunigen.

Route

Gelesen ist nicht geprüft: Im Modul entscheidest du die Fälle selbst und siehst danach, wo dein Urteil trägt.

3 Checks starten →

Modul-Aufbau

EINFÜHRUNGErst den Plan lesen, dann den Index bauen~15 Min
ADR-001PLANLESENsolide
ADR-002INDEXKOSTENsenior
SORT-003MISSION · SELEKTIVITÄTsenior

Quellen

  1. 01use-the-index-luke.com
  2. 02postgresql.org/docs/current/transaction-iso.html
  3. 03sre.google/sre-book/table-of-contents

Verfasst von Julian Zentgraf