it-swarm.com.de

Woher weiß ich, welche Indizes für eine Tabelle erstellt werden sollen?

Gibt es eine Möglichkeit, herauszufinden, wie Indizes für eine Tabelle am besten erstellt werden können?

34
Nick Ginanto

Kurze Faustregeln. (Einige davon werden automatisch erstellt, können jedoch möglicherweise später manuell gelöscht werden, abhängig von Ihrer Datenbank. Gehen Sie nicht davon aus, dass Sie immer an PostgreSQL arbeiten werden. )

  • Indizieren Sie jeden Primärschlüssel.
  • Indizieren Sie jeden Fremdschlüssel.
  • Indizieren Sie jede in einer JOIN-Klausel verwendete Spalte.
  • Indizieren Sie jede Spalte, die in einer WHERE-Klausel verwendet wird.
  • Lesen Sie Ihre Dokumentation, um zu erfahren, welche "esoterischen" Indizierungsoptionen Ihre Datenbank unterstützt.

Jeder Primärschlüssel bedeutet, dass mehrspaltige Primärschlüssel einen einzigen Index haben sollten, der alle Spalten abdeckt. PostgreSQL erstellt diesen Index automatisch, wenn Sie einen mehrspaltigen Primärschlüssel deklarieren.

Es gibt viele Fälle, in denen ein einzelner mehrspaltiger Index eine bessere Leistung bietet als mehrere einspaltige Indizes. Überwachen Sie langsame Abfragen und testen Sie, welche welche ist.

Angenommen, jede Änderung an der Indizierung verbessert einige Datenbankaktivitäten und verschlechtert andere. Ich finde es hilfreich, eine Reihe von SQL-Anweisungen zu haben, die ich vor und nach Änderungen an Indizes profilieren kann. Dieser Satz enthält die Anweisungen SELECT, INSERT, UPDATE und DELETE.

Es gibt keinen Ersatz dafür, die Dokumente für Ihre speziellen DBMS zu studieren.

  • CREATE INDEX
  • Indizes (Beachten Sie insbesondere die Abschnitte zur Indizierung von Ausdrücken, zu Teilindizes und zur Untersuchung der Indexnutzung.)

Zusätzlich zu dem, was @ Catcall bereits bereitgestellt hat , und um eine kleine Korrektur hinzuzufügen:

Ich habe auch einige Grundlagen in dieser eng verwandten Antwort auf SO kürzlich ) behandelt.

Bisherige Antworten scheinen darauf hinzudeuten, dass Sie Indizes für Primärschlüssel erstellen müssen, aber dies ist in PostgreSQL nicht der Fall (es gelten teilweise Ausnahmen). Ich zitiere das Handbuch hier :

PostgreSQL erstellt automatisch einen eindeutigen Index, wenn für eine Tabelle eine eindeutige Einschränkung oder ein eindeutiger Primärschlüssel definiert wird. Der Index deckt die Spalten ab, aus denen der Primärschlüssel oder die eindeutige Einschränkung besteht (ggf. ein mehrspaltiger Index), und ist der Mechanismus, der die Einschränkung erzwingt.

Meine kühne Betonung.

Sie können möchten zusätzliche Indizes für die zweite oder spätere Spalte eines mehrspaltigen Index erstellen, aber die erste wird im Allgemeinen gut von einer mehrspaltigen abgedeckt Index - außer wenn zusätzliche Spalten den Index viel größer machen. Wir haben das unter dieser verwandten Frage ausführlich besprochen:

Ist ein zusammengesetzter Index auch für Abfragen im ersten Feld geeignet?

Mehrspaltenindizes , Teilindizes und Indizes für Ausdrücke sind besonders leistungsfähige Werkzeuge in PostgreSQL. Seit PostgreSQL 9.2 gibt es auch Nur-Index-Scans , das Äquivalent von "Deckungsindizes" in anderen RDBMS. Dies ist kein anderer Indextyp, sondern eine neue Funktion des RDBMS mit vorhandenen Indextypen.

Jeder Index ist mit spezifischen Kosten verbunden . Daher führt kein Weg an Grundkenntnissen vorbei, um die Indizierung wirklich zu optimieren. Nur mehr Indizes zu erstellen, kann mehr schaden als nützen. Insbesondere können Indizes verhindern, dass HOT-Updates die Leistung verbessern.

Im Allgemeinen werden Schreiboperationen (DELETE, UPDATE) teurer (können aber auch davon profitieren!), Während Leseoperationen (SELECT) im Allgemeinen nur davon profitieren. Zu viele Indizes können den Cache-Speicher erschöpfen, so dass selbst Leseoperationen können leiden.

Schließlich enthält diese Postgres-Wiki-Seite zur Indexpflege Tools zum Auffinden doppelter oder nicht verwendeter Indizes (unter anderem).

14

Es gibt zwei Möglichkeiten.

  1. Mach du es.
  2. Technologie macht es.

Die Antwort dafür ist hier ziemlich ausführlich dokumentiert. Schauen wir uns also etwas anderes an.

Pghero

Pghero kann Ihnen möglicherweise helfen, wenn Sie eine automatisierte Beratung wünschen.

Das heißt, es hat einige Mängel.

  1. Es funktioniert nur mit WHERE und ORDER BY, nein JOINS.
  2. Es werden nur Statistiken zu Prozent NULL und unterschiedliche Werte verwendet.

Schauen Sie sich dieses Video an für weitere Informationen .

1
Evan Carroll