PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O Postgres está ignorando um índice de timestamp, por quê?


Vamos tentar algo diferente. Estou apenas sugerindo isso como uma "resposta" por causa de seu tamanho e você não pode formatar um comentário. Vamos abordar a consulta modularmente como uma série de subconjuntos que precisam ser cruzados. Vamos ver quanto tempo leva para executar cada um deles (por favor, informe). Substitua seus timestamps por t1 e t2. Observe como cada consulta se baseia na anterior, tornando a anterior uma "exibição em linha".

EDIT:também, confirme as colunas na tabela Redes.

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