0Pricing
SQL Academy · Lektion

B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes

Vergleichen Sie die wichtigsten Indextypen in PostgreSQL und wählen Sie den passenden für Gleichheits-, Bereichs-, Geometrie-, JSON- und Volltextabfragen.

B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Überblick über Indextypen

PostgreSQL verfügt über mehrere Indextypen, die jeweils für unterschiedliche Zugriffsmuster optimiert sind:

  • B-tree – Gleichheit und Bereiche (Standard)
  • Hash – nur Gleichheit
  • GiST – Geometrie, Volltext, benutzerdefinierte Anwendungen
  • GIN – zusammengesetzte Werte (Arrays, JSONB, Volltext)
  • BRIN – Blockbereiche – riesige, sortierte Tabellen
  • SP-GiST – räumlich partitionierte Bäume

B-tree: Der Standard

Wird in 95 % der Fälle verwendet. Unterstützt =, <, <=, >, >=, BETWEEN, ORDER BY:

CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);

Hash-Index

Nur für Gleichheitsabfragen. Seit PG 10 ausfallsicher. Kleiner und bei reinen Gleichheitsabfragen geringfügig schneller als ein B-tree, aber nur für einen sehr speziellen Anwendungsfall:

CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.

GiST-Index

Generalised Search Tree – erweiterbar, unterstützt Bereichstypen, geometrische Typen, IP-Adressen und Volltext:

CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.

CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.

GIN-Index

Generalised Inverted Index – ideal für zusammengesetzte Werte, bei denen jedes Element auf viele Zeilen verweist:

CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators

CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search

CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queries

BRIN-Index

Block Range INdexes fassen Wertebereiche über jeweils N Seiten zusammen. Sie sind winzig (bei Terabyte-Tabellen nur wenige Kilobyte), aber nur effektiv, wenn die Daten physisch nach der indizierten Spalte sortiert sind:

CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.

Größenvergleich

Für eine Tabelle mit einer Milliarde Zeilen:

  • B-tree für ein BIGINT: ~30 GB
  • BRIN für ein TIMESTAMPTZ: ~1 MB

BRIN ist wesentlich kleiner, übertrifft den B-tree aber nur bei sequenziellen bzw. sortierten Abfragen.

Den passenden Indextyp auswählen

Entscheidungsweg:

  • Gleichheit + Bereich bei skalaren Werten → B-tree
  • Gleichheit bei einer riesigen Menge skalarer Werte → B-tree (Hash nur nach einer Messung)
  • Arrays / JSONB / Volltext → GIN
  • Bereichstypen, Geometrie, unscharfe Textsuche → GiST
  • Riesige sortierte Tabelle, nur Anhänge → BRIN

Kompromisse bei GIN

GIN ist bei Abfragen nach dem Muster „alle Zeilen finden, die X enthalten“ am schnellsten, aber bei INSERT/UPDATE langsamer als B-tree. Bei Tabellen mit sehr vielen Schreibvorgängen können Sie fastupdate=off in Betracht ziehen, um die Pending-Liste von GIN zu steuern.

Operator-Klassen

Jeder Indextyp funktioniert mit bestimmten Operatoren. JSONB verwendet jsonb_path_ops für kleinere und schnellere Indizes, die nur die Enthaltenseinsprüfung unterstützen:

CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.

Zusammengesetzte Indizes je Typ

Zusammengesetzte B-tree-Indizes verwenden eine Übereinstimmung nach dem Präfixprinzip. Zusammengesetzte GIN-Indizes funktionieren, sind aber größer; normalerweise erstellen Sie separate einspaltige GIN-Indizes.

Zusammenfassung

Wählen Sie den Indextyp passend zur Abfrage.

  • B-tree: Standard
  • GIN: Arrays/JSONB/Volltext
  • GiST: Bereiche/Geometrie/unscharfe Suche
  • BRIN: sequenzielle Abfragen/nur Anhänge

Kurztest

Sie indizieren eine TEXT[]-Spalte für „enthält“-Abfragen. Welcher Indextyp ist geeignet?

Häufig gestellte Fragen

Ist die Lektion „B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes“ kostenlos?

Ja — der vollständige Text von „B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes“?

Vergleichen Sie die wichtigsten Indextypen in PostgreSQL und wählen Sie den passenden für Gleichheits-, Bereichs-, Geometrie-, JSON- und Volltextabfragen. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. B-tree- vs. Hash- vs. GiST- vs. GIN-Indizes
  2. Zusammengesetzte Indizes und Spaltenreihenfolge
  3. Partielle Indizes und Ausdrucksindizes
  4. Indexwartung und Bloat
← Zurück zu SQL Academy