Direkt zum Inhalt
Urkunden
JSON-FunktionenTabellen & Schema ManagementMathe-FunktionenDatenbankenString-FunktionenAuslöserIndizesDatum FunktionenBasic Syntax

PostgreSQL Ausdrucksindizes

Mit Expression-Indizes in PostgreSQL kannst du einen Index erstellen, der auf Ausdrücken oder Berechnungen für eine oder mehrere Spalten basiert. Sie werden verwendet, um Abfragen zu optimieren, die komplexe Berechnungen oder Transformationen direkt innerhalb der `WHERE`-Klausel beinhalten.

Verwendung

Expression-Indizes sind besonders nützlich, wenn Abfragen häufig berechnete Werte oder Funktionen beinhalten. Sie verbessern die Abfrageleistung, indem sie das Ergebnis eines Ausdrucks und nicht die Rohdaten einer Spalte indizieren.

CREATE INDEX index_name ON table_name (expression);

In dieser Syntax steht "Ausdruck" für die Berechnung oder Funktion, deren Ergebnis du indizieren möchtest, um die Abfrageeffizienz für Abfragen, die diesen Ausdruck beinhalten, zu verbessern.

Beispiele

1. Basic Expression Index

CREATE INDEX idx_lower_email ON users (LOWER(email));

Hier wird ein Index auf der Kleinbuchstabenversion der Spalte "E-Mail" in der Tabelle "Benutzer" erstellt, um die Suche ohne Berücksichtigung der Groß- und Kleinschreibung zu optimieren.

2. Indexierung eines berechneten Wertes

CREATE INDEX idx_total_cost ON orders (quantity * price);

In diesem Beispiel wird ein Index für das Ergebnis der Multiplikation von "Menge" mit "Preis" in der Tabelle "Bestellungen" erstellt, um Abfragen zu beschleunigen, die nach den Gesamtkosten filtern.

3. Index mit einer Funktion

CREATE INDEX idx_date_part ON events (date_part('year', event_date));

Dieses Beispiel indiziert das Jahr, das aus dem `event_date` extrahiert wurde, mit der Funktion `date_part` und verbessert so die Leistung für jahresbasierte Abfragen.

Tipps und bewährte Praktiken

  • Verwende Ausdrucksindizes für häufig verwendete Ausdrücke. Indiziere Ausdrücke, die häufig in der `WHERE`-Klausel vorkommen, um die Leistung zu steigern.
  • Berücksichtige den Aufwand für die Wartung. Expression-Indizes können die Zeit für `INSERT`- und `UPDATE`-Operationen aufgrund der zusätzlichen Indizierung erhöhen.
  • Auswirkungen auf die Testleistung. Teste immer die Auswirkungen von neu erstellten Expression-Indizes auf die Leistung, da sie nicht immer einen Vorteil bieten.
  • Halte die Ausdrücke einfach. Komplexe Ausdrücke bringen möglicherweise keine signifikanten Leistungsverbesserungen und können die Indexpflege erschweren.
  • Verstehe die Grenzen. Expression-Indizes sind möglicherweise nicht von Vorteil, wenn die Indexselektivität gering ist oder die Ausdrücke zu komplex sind, was zu minimalen Leistungssteigerungen führen kann.

Zusätzliche Überlegungen

  • Unterschied zu regulären und partiellen Indizes: Im Gegensatz zu regulären Indizes, die rohe Spaltendaten verwenden, verwenden Expression-Indizes berechnete Werte. Teilindizes hingegen werden mit einer Bedingung erstellt, um nur eine Teilmenge von Zeilen zu indizieren, was sich von der Verwendung von Ausdrücken unterscheidet.
  • Datenkonsistenz und Aktualisierungen: PostgreSQL aktualisiert indizierte Ausdrücke automatisch, wenn sich Daten ändern. Beachte jedoch, dass dies zu einem zusätzlichen Overhead bei `INSERT` und `UPDATE` Operationen führen kann.
  • Einen Ausdrucksindex fallen lassen: Um einen Ausdrucksindex zu entfernen, kannst du die folgende Syntax verwenden:
DROP INDEX index_name;

Dies kann nützlich sein, wenn ein Index nicht mehr benötigt wird oder sich negativ auf die Leistung auswirkt.