2010-12-01 9 views
21

Ich habe eine Postgres-Datenbank, die 2 Spalten hat, die keine Primärschlüssel sind (noch sein können), aber auf einer Menge gesucht werden und für die Gleichheit mit 2 Spalten in anderen Tabellen verglichen werden.Wie ermittelt man, welche Art von Index in Postgres verwendet wird?

Ich glaube, das ist ein perfekter Fall für das Hinzufügen eines Index zu meinen Tabellen. Ich habe noch nie eine Indizierung in einer Datenbank durchgeführt, also versuche ich, die richtige Methode dafür zu finden.

Ich habe gelernt, dass es mehrere Arten der Indizierung gibt, die ich auswählen kann. Wie ermittle ich, welche Methode für meine Datenbank am effizientesten ist? Wäre es auch sinnvoll, einen einzigen Index zu erstellen, der beide Spalten abdeckt?

Antwort

18

Postgres unterstützt B-Tree-, R-Tree-, Hash-, GiST- und GIN-Indizierungstypen. Die B-Baum-Indizierung ist die gebräuchlichste und passt zu den häufigsten Szenarien. Dies ist die Syntax:

CREATE INDEX idex_name ON table_name USING btree(column1, column2); 

Hier ist die createindex Dokumentation und hier weitere Informationen zu verschiedenen indextypes in Postgres ist.

Welche Art von Index Sie verwenden sollten, hängt davon ab, welche Arten von Vorgängen Sie ausführen möchten. Wenn Sie einfach eine Gleichheitsprüfung wünschen, dann ist der Hash-Index der beste. Für die häufigsten Operationen (z. B. Vergleich, Mustervergleich) sollte B-Baum verwendet werden. Ich habe persönlich nie GiST oder GIN Indizierung verwendet. Irgendein Guru da draußen?

Die Dokumentation beschreibt alle diese Typen. Sie können dir besser helfen als ich :)

Hoffe, das hilft.

+0

danke, ich habe meine Fragen nur ein bisschen aktualisiert. Ich suche eigentlich nur nach Gleichheit, also vermute ich, dass ein Hash-Index der Beste sein wird. – Kellenjb

+2

Scratchen, dass Hash nicht über mehrere Spalten hinweg funktioniert. Ich schätze, ich muss etwas experimentieren, um zu sehen, ob 2 separate Hashes schneller sind als 1 single b-tree – Kellenjb

+11

Sie wollen im Allgemeinen keinen Hash-Index verwenden. Aus der Dokumentation von pg 9.1: "Hash-Index-Operationen werden derzeit nicht mit WAL protokolliert, so dass Hash-Indizes nach einem Datenbankabsturz möglicherweise mit REINDEX neu erstellt werden müssen. Sie werden auch nicht über Streaming oder dateibasierte Replikation repliziert der Indexgebrauch wird derzeit abgeraten. " –

3

Versuchen Sie auch, die queryplanner zu verstehen, weil dieser Teil von PostgreSQL mit Ihren Indizes arbeiten muss. EXPLAIN ANALYSE wird zur Optimierung Ihrer Abfragen benötigt.

Verwandte Themen