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

PostgreSQL Leistungsüberlegungen für Indizes

Indizes in PostgreSQL sind Datenbankobjekte, die die Geschwindigkeit der Datenabfrage in einer Tabelle auf Kosten des zusätzlichen Speicherplatzes und des Wartungsaufwands verbessern. Sie sind entscheidend für die Optimierung der Abfrageleistung, besonders bei großen Datenmengen.

Verwendung

Indizes werden verwendet, um die Leistung von Leseoperationen wie SELECT Abfragen zu verbessern, indem sie einen schnelleren Datenzugriff ermöglichen. Sie werden von PostgreSQL bei der Ausführung von Abfragen automatisch verwendet, sofern sie für die Abfragebedingungen relevant sind.

CREATE INDEX index_name
ON table_name (column_name);

In dieser Syntax erzeugt CREATE INDEX einen Index mit dem Namen index_name auf dem angegebenen column_name von table_name und optimiert so die Suchvorgänge in dieser Spalte.

Beispiele

1. Grundlegende Indexerstellung

CREATE INDEX idx_employee_name
ON employees (last_name);

In diesem Beispiel wird ein Index für die Spalte last_name in der Tabelle employees erstellt, um Abfragen zu beschleunigen, die nach dem Nachnamen filtern oder sortieren.

2. Einzigartiger Index

CREATE UNIQUE INDEX idx_unique_email
ON users (email);

In diesem Fall sorgt ein eindeutiger Index dafür, dass alle Werte in der Spalte email der Tabelle users eindeutig sind, wodurch doppelte Einträge vermieden und die Effizienz der Suche optimiert werden.

3. Mehrspaltiger Index

CREATE INDEX idx_order_customer_date
ON orders (customer_id, order_date);

Dieses Beispiel zeigt einen mehrspaltigen Index auf customer_id und order_date, der die Leistung für Abfragen verbessern kann, die nach beiden Spalten filtern, z. B. um Bestellungen für einen bestimmten Kunden innerhalb eines Datumsbereichs abzurufen.

Index-Typen

1. Partieller Index

CREATE INDEX idx_active_users
ON users (email)
WHERE active = true;

Teilindizes können verwendet werden, um eine Teilmenge von Zeilen in einer Tabelle zu indizieren, was sich positiv auf die Leistung auswirken kann, wenn Abfragen häufig nach bestimmten Bedingungen filtern.

2. Ausdrucksindex

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

Expression-Indizes ermöglichen die Indizierung des Ergebnisses eines Ausdrucks, was für die Suche nach Groß- und Kleinschreibung oder berechneten Spaltenwerten nützlich ist.

Tipps und bewährte Praktiken

  • Beurteile den Bedarf an Abfragen. Erstelle Indizes auf der Grundlage von Abfragemustern; jede Spalte zu indizieren ist ineffizient.
  • Überwache die Indexnutzung. Verwende die Ansicht pg_stat_user_indexes von PostgreSQL, um die Indexnutzung zu überwachen und ungenutzte Indizes zu identifizieren.
  • Gleichgewicht zwischen Lesen und Schreiben. Berücksichtige den Kompromiss zwischen der Verbesserung der Leseleistung und dem Overhead bei Schreiboperationen, da die Indizes bei jedem Einfügen, Aktualisieren oder Löschen aktualisiert werden müssen.
  • Nutze eindeutige Indizes für Integrität. Verwende eindeutige Indizes, um Datenintegritätsbeschränkungen durchzusetzen, wann immer dies möglich ist.
  • Regelmäßige Wartung. Analysiere und leere die Tabellen regelmäßig, um die Effizienz des Index zu erhalten und ein Aufblähen zu verhindern.
  • Stellen Sie fragmentierte Indizes wieder her. Verwende den Befehl REINDEX, um die Indizes wieder aufzubauen, wenn sie fragmentiert sind.
  • Bewerte die Wirksamkeit des Index. Mit dem Befehl EXPLAIN kannst du die Ausführungspläne von Abfragen einsehen und die Indexauslastung beurteilen.
  • Wähle den richtigen Index-Typ. Wähle B-Baum-, GiST- oder GIN-Indizes je nach Anwendungsfall und Abfrageanforderungen.