Kann ich herausfinden, wie ich am besten weiß, welche Indizes für eine Tabelle erstellt werden müssen?
WHERE
Klauseln verwenden.
Kann ich herausfinden, wie ich am besten weiß, welche Indizes für eine Tabelle erstellt werden müssen?
WHERE
Klauseln verwenden.
Antworten:
Kurze Faustregeln. (Einige davon werden automatisch erstellt, aber möglicherweise später manuell gelöscht werden kann, auf dem dbms abhängig. Gehen Sie nicht davon werden Sie immer Arbeit auf PostgreSQL.)
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.
In vielen Fällen erzielen Sie mit einem einzelnen mehrspaltigen Index eine bessere Leistung als mit mehreren einspaltigen Indizes. Überwachen Sie langsame Abfragen und führen Sie Tests durch, um herauszufinden, welche welche sind.
Angenommen, Änderungen an der Indizierung verbessern einige Datenbankaktivitäten und beeinträchtigen 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 für das Studium der Dokumente für Ihre speziellen Datenbanken.
Zusätzlich zu dem, was @Catcall bereits zur Verfügung gestellt hat , und um eine kleine Korrektur hinzuzufügen:
In dieser eng verwandten Antwort zu SO habe ich kürzlich auch einige Grundlagen 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 (teilweise Ausnahmen). Ich zitiere das Handbuch hier :
PostgreSQL erstellt automatisch einen eindeutigen Index, wenn eine eindeutige Einschränkung oder ein eindeutiger Primärschlüssel für eine Tabelle 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.
Möglicherweise möchten Sie zusätzliche Indizes für die zweite oder spätere Spalte eines mehrspaltigen Index erstellen , aber der erste wird im Allgemeinen von einem mehrspaltigen Index gut abgedeckt - es sei denn, zusätzliche Spalten vergrößern den Index erheblich. Wir haben das unter dieser verwandten Frage ausführlich besprochen:
Ist ein zusammengesetzter Index auch für Abfragen im ersten Feld geeignet?
Mehrspaltige Indizes , Teilindizes und Indizes für Ausdrücke sind in PostgreSQL besonders leistungsstarke Werkzeuge. Seit PostgreSQL 9.2 gibt es auch Index-Only-Scans , die in anderen RDBMS "Indizes abdecken". Dies ist kein anderer Indextyp, sondern eine neue Funktion des RDBMS mit vorhandenen Indextypen.
Jeder Index ist mit spezifischen Kosten verbunden , sodass Grundkenntnisse für eine wirkliche Optimierung der Indexierung nicht ausreichen. Das einfache Erstellen von mehr Indizes 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 von Vorteil sein!), Während Leseoperationen ( SELECT
) im Allgemeinen nur von Vorteil sind. Zu viele Indizes können den Cache - Speicher erschöpft , so dass auch Leseoperationen können leiden.
Schließlich enthält diese Postgres-Wiki-Seite zur Indexverwaltung Tools zum Auffinden doppelter oder nicht verwendeter Indizes (unter anderem).
Es gibt zwei Möglichkeiten.
Die Antwort, es selbst zu tun, ist hier ziemlich ausführlich dokumentiert. Schauen wir uns also etwas anderes an.
Pghero kann Ihnen möglicherweise behilflich sein, wenn Sie eine automatisierte Beratung wünschen.
Das heißt, es hat einige Mängel.
WHERE
und ORDER BY
nein JOINS
.Weitere Informationen finden Sie in diesem Video .