Sobes.tech
Middle

Welche Arten von Indizes gibt es in PostgreSQL?

sobes.tech KI

Antwort von AI

Es gibt die folgenden Haupttypen von Indizes:

  1. B-tree (B-Baum) - der am weitesten verbreitete Typ, geeignet für die meisten typischen Abfragen (Gleichheit, Vergleich, Bereich). Basierend auf einem balancierten Baum.

  2. Hash (Hash) - wird verwendet, um auf Gleichheit (=) zu prüfen. Schneller als B-tree für solche Abfragen, unterstützt aber keine Vergleiche oder Bereiche. Speichert den Hash-Wert des Schlüssels und einen Zeiger auf die Zeile.

  3. GiST (Generalized Search Tree) - eine verallgemeinerte Suchbaumstruktur, die es ermöglicht, verschiedene Indizes für komplexe Datentypen zu erstellen (geometrisch, textuell mit Volltextsuche). Basierend auf einem balancierten Baum.

  4. SP-GiST (Space-Partitioned Generalized Search Tree) - eine spezialisierte Version von GiST für Daten, die nach Raum aufgeteilt werden können (z.B. Punkte, Rechtecke). Beispiele: k-d Bäume, Quadtrees.

  5. GIN (Generalized Inverted Index) - ein verallgemeinierter invertierter Index, hauptsächlich für die Suche nach Elementen innerhalb zusammengesetzter Werte (z.B. Arrays, JSONB). Wird häufig für Volltextsuche verwendet.

  6. BRIN (Block Range INdex) - Blockbereich-Index. Geeignet für sehr große Tabellen mit natürlich sortierten Daten (z.B. nach Zeit). Indexiert den Wertebereich in physischen Datenblöcken.

  7. Bloom (Bloom-Filter) - kein traditioneller Index, sondern eine probabilistische Datenstruktur für schnelle Überprüfung des Nichtvorhandenseins eines Elements. Wird verwendet, um die Abfrage in sehr großen Tabellen zu beschleunigen, wenn keine exakte Übereinstimmung erforderlich ist, oder als zusätzlicher Filter vor dem Scannen des Hauptindex.

Anwendungsbeispiele:

  • B-tree: Index auf numerischen Feldern, Daten, Strings für die Bereichssuche (WHERE amount > 100).
  • Hash: Wird selten direkt verwendet, da B-tree für die meisten Aufgaben in der Regel schneller ist.
  • GiST: Geospatiale Indizes (gist(location)), Indizes für Volltextsuche (to_tsvector).
  • SP-GiST: Indizes für zweidimensionale Daten (spgist(point)).
  • GIN: Indizes für Arrays (gin(tags)), JSONB (gin(data)), Volltextsuche.
  • BRIN: Index auf dem timestamp-Feld in Log-Tabellen, bei denen die Daten nach Zeit geordnet sind.
  • Bloom: Index auf einer Menge von Spalten (bloom(col1, col2, col3)) zum schnellen Ausschluss von Zeilen, bei denen die Wertkombinationen nicht vorhanden sind.

Die Wahl des Index-Typs hängt vom Datentyp der Spalte und der Art der Abfragen ab, die optimiert werden sollen.