Ich habe eine Tabelle , die Daten Reservierung unter Verwendung der Spalten speichert starts_at
& ends_at
Jedes Mal , wenn ich die Tabelle bin Abfrage überlappende Reservierungen zu finden, ich habe eine Möglichkeit , eine der folgenden Abfragen mit:
SELECT * FROM reservations
WHERE starts_at < '2014-01-03 00:00:00'
AND ends_at >='2014-01-01 00:00:00';
Oder
SELECT * FROM reservations
WHERE tsrange(starts_at, ends_at) && ('2014-01-01 00:00:00', '2014-01-03 00:00:00')
Ich habe reguläre B-Tree-Indizes für die Spalten starts_at
und ends_at
, daher werden sie bei der ersten Abfrage immer verwendet. Sofern ich keinen funktionalen GiST-Index für den tsrange definiere, führt die zweite Abfrage einen vollständigen Scan durch.
create index tsrange_idx on reservations using gist(tsrange(starts_at, ends_at));
Meine Frage ist, wenn die Tabelle wächst, welcher Index wird schneller sein? Wahrscheinlich ist die Antwort offensichtlich, wenn man sich den Ausführungsplan für Abfragen ansieht, aber ich bin mit dem Lesen von EXPLAIN ANALYZE
Ausgaben nicht vertraut .