PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres sta ignorando un indice di timestamp, perché?

Proviamo qualcosa di diverso. Sto solo suggerendo questo come una "risposta" a causa della sua lunghezza e non è possibile formattare un commento. Affrontiamo la query in modo modulare come una serie di sottoinsiemi che devono essere intersecati. Vediamo quanto tempo impiega ciascuno di questi per l'esecuzione (si prega di segnalare). Sostituisci i tuoi timestamp con t1 e t2. Nota come ogni query si basa su quella precedente, rendendo la precedente una "vista in linea".

EDIT:conferma anche le colonne nella tabella Reti.

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