0

Ich habe es schwer, Abfragen auf einem sehr großen Tisch zu optimieren. Grundsätzlich sind alle von dem sie filtern, um die Ergebnismenge durch das Datum:Optimieren von Datumsabfragen in Postgresql

SELECT FROM bigtable WHERE date >= '2015-01-01' AND date <= '2016-01-01' ORDER BY date desc; 

das folgende Datum Index Hinzufügen macht eigentlich alles noch schlimmer:

CREATE INDEX CONCURRENTLY bigtable_date_index ON bigtable(date(date)); 

Das heißt, ohne den Index es etwa 1 s dauert laufen und damit dauert es etwa 10 Sekunden zu laufen. Aber mit größeren Entfernungen und Filtern ist es auch ohne diesen Index sehr langsam.

Ich benutze postgresql 9.4 und ich sehe, dass 9.5 hat einige Verbesserungen für die Sortierung, die helfen könnte?

Sollen BRIN-Indizes in diesem Fall helfen?

+1

Bitte lesen Sie http://wiki.postgresql.org/wiki/SlowQueryQuestions dann [Bearbeiten] Ihre Frage und füge die fehlende Information hinzu. –

+1

Und ein starker Hinweis zu ** nicht ** nennen Sie Ihre Spalten "Datum". – joop

+0

das ist offensichtlich und Beispiel @joop – brauliobo

Antwort

0

Damit ein Index effektiv ist, muss er dasselbe indizieren, nach dem Sie filtern. In diesem Fall filtern Sie nach date, aber Sie scheinen date(date) indexiert zu haben, daher kann der Index nicht verwendet werden.

Filter entweder Tisch date(date) mit:

SELECT FROM bigtable 
WHERE date(date) >= '2015-01-01' AND date(date) <= '2016-01-01' 
ORDER BY date(date) desc; 

Oder Index, der die nackten date:

CREATE INDEX CONCURRENTLY bigtable_date_index ON bigtable(date);