PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Mehrere Indizes im Vergleich zu einem einzelnen Index für mehrere Spalten in Postgresql

Unabhängig davon, wie viele Indizes Sie für Relationen erstellt haben, wird nur einer davon in einer bestimmten Abfrage verwendet (welcher hängt von Abfrage, Statistik usw. ab). In Ihrem Fall würden Sie also keinen kumulativen Vorteil daraus ziehen, zwei einspaltige Indizes zu erstellen. Um die maximale Leistung aus dem Index herauszuholen, würde ich vorschlagen, den zusammengesetzten Index für (Ort, Zeitstempel) zu verwenden.

Beachten Sie, dass Abfragen wie ... WHERE timestamp BETWEEN smth AND smth verwendet den obigen Index nicht bei Abfragen wie ... WHERE location = 'smth' oder ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth Wille. Das liegt daran, dass das erste Attribut im Index entscheidend für die Suche und Sortierung ist.

Vergiss nicht, aufzutreten

ANALYZE;

nach der Indexerstellung, um Statistiken zu sammeln.

Aktualisierung: Als @MondKin In Kommentaren erwähnt, können bestimmte Abfragen tatsächlich mehrere Indizes für dieselbe Relation verwenden. Fragen Sie beispielsweise mit OR ab Klauseln wie a = 123 OR b = 456 (vorausgesetzt, es gibt Indizes für beide Spalten). In diesem Fall würde Postgres Bitmap-Index-Scans für beide Indizes durchführen, eine Vereinigung der resultierenden Bitmaps erstellen und sie für den Bitmap-Heap-Scan verwenden. Unter bestimmten Bedingungen kann dasselbe Schema für AND verwendet werden Abfragen, aber anstelle von Union würde es eine Schnittmenge geben.