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

PostgreSQL Partielle Indizes

Indizes in PostgreSQL sind Datenbankobjekte, die die Geschwindigkeit von Datenabfragen in einer Tabelle verbessern. Teilindizes sind eine Art von Index, der Zeilen nur dann in den Index aufnimmt, wenn sie eine bestimmte Bedingung erfüllen, um die Leistung zu optimieren und Speicherplatz zu sparen.

Verwendung

Teilindizes werden verwendet, wenn du eine Teilmenge von Zeilen in einer Tabelle indizieren möchtest, in der Regel diejenigen, die bestimmte Kriterien erfüllen, um die Abfrageleistung zu verbessern und gleichzeitig den Speicherplatzbedarf zu minimieren. Sie werden durch Hinzufügen einer WHERE Klausel zur Indexdefinition definiert.

CREATE INDEX index_name
ON table_name (column_name)
WHERE condition;

In dieser Syntax gibt die WHERE condition an, welche Zeilen in den Index aufgenommen werden sollen.

Beispiele

1. Basic Partial Index

CREATE INDEX active_users_index
ON users (last_login)
WHERE active = true;

In diesem Beispiel wird ein partieller Index in der Tabelle users für die Spalte last_login erstellt, aber nur für Zeilen, in denen das Feld active true lautet.

2. Indizierung mit bestimmten Wertbedingungen

CREATE INDEX high_priority_orders_index
ON orders (order_date)
WHERE priority = 'high';

Hier wird ein partieller Index auf der Tabelle orders für die Spalte order_date erstellt, der sich nur auf Bestellungen mit dem Wert priority von 'high' konzentriert.

3. Komplexer Zustand Teilindex

CREATE INDEX recent_high_sales_index
ON sales (sale_amount)
WHERE sale_amount > 1000 AND sale_date > CURRENT_DATE - INTERVAL '1 year';

In diesem Beispiel wird ein partieller Index in der Tabelle sales für die Spalte sale_amount für Verkäufe von mehr als 1000 $ im letzten Jahr erstellt, um Abfragen für die jüngsten Transaktionen mit hohem Wert zu optimieren.

4. Partieller Index mit Ausdrücken

CREATE INDEX discounted_products_index
ON products ((price - discount))
WHERE discount > 0;

Dieses Beispiel zeigt, wie ein Ausdruck im Index verwendet wird, um einen Teilindex für die berechneten price - discount für Produkte mit einem Rabatt zu erstellen.

Tipps und bewährte Praktiken

  • Ziele auf häufige Abfragen ab. Verwende Teilindizes für Abfragen, die häufig auf eine bestimmte Teilmenge von Daten zugreifen, um die Leistungsvorteile zu maximieren.
  • Überwache die Indexnutzung. Analysiere regelmäßig die Nutzung der Indizes, um sicherzustellen, dass sie immer noch nützlich sind, da sich Datenmuster und Abfrageanforderungen mit der Zeit ändern können.
  • Minimiere die Indexgröße. Sei in der WHERE Klausel spezifisch, um die Indexgröße klein und effizient zu halten und die Indizierung unnötiger Zeilen zu vermeiden.
  • Auswirkungen auf die Testleistung. Nachdem du einen partiellen Index erstellt hast, teste die Abfrageleistung, um sicherzustellen, dass er die gewünschten Geschwindigkeitsverbesserungen bringt.
  • Betrachte die Schreiboperationen. Sei dir bewusst, dass partielle Indizes die Schreibleistung beeinträchtigen können, da bei Einfügungen, Aktualisierungen und Löschungen ein Overhead für die Pflege der Indizes entsteht.
  • Verwende REINDEX. Verwende regelmäßig den Befehl REINDEX, um partielle Indizes neu aufzubauen und ihre Effizienz zu erhalten, insbesondere nach größeren Datenänderungen.
  • Hebelwirkung EXPLAIN. Nutze den Befehl EXPLAIN, um herauszufinden, wie Abfragen partielle Indizes nutzen, und passe deine Indexierungsstrategie entsprechend an.

Überlegungen zu Leistung und Version

  • Teilindizes sind besonders vorteilhaft für Tabellen mit großen Datenmengen, von denen nur eine kleine Teilmenge häufig abgefragt wird.
  • Die Pflege von Indizes erfordert Ressourcen, daher solltest du den Kompromiss zwischen Lese- und Schreibleistung abwägen.
  • Vergewissere dich, dass du mit deiner PostgreSQL-Version kompatibel bist, da die Verbesserungen der Indizierungsstrategien von Version zu Version unterschiedlich sein können.