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

Postgres ignoriert einen Zeitstempelindex, warum?

Versuchen wir etwas anderes. Ich schlage dies nur wegen seiner Länge als "Antwort" vor und Sie können keinen Kommentar formatieren. Lassen Sie uns die Abfrage modular als eine Reihe von Teilmengen angehen, die geschnitten werden müssen. Mal sehen, wie lange es dauert, bis sie ausgeführt werden (bitte melden). Ersetzen Sie Ihre Zeitstempel für t1 und t2. Beachten Sie, wie jede Abfrage auf der vorherigen aufbaut und die vorherige zu einer "Inline-Ansicht" macht.

BEARBEITEN:Bitte bestätigen Sie auch die Spalten in der Netzwerktabelle.

1

 select PM.receiver_id from private_messages PM
 where PM.create_at between (t1 and t2)

2

 select U.id, U.network_id from users U
 join
 (
   select PM.receiver_id from private_messages PM 
   where PM.create_at between (t1 and t2)
 ) as FOO
 on U.id = FOO.receiver_id

3

select N.* from networks N
join
(
select U.id, U.network_id from users U
 join
 (
   select PM.receiver_id from private_messages PM 
   where PM.create_at between (t1 and t2)
 ) as FOO
 on U.id = FOO.receiver_id
) as BAR
on N.id = BAR.network_id