sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres está ignorando un índice de marca de tiempo, ¿por qué?

Probemos algo diferente. Solo sugiero esto como una "respuesta" debido a su longitud y no puede formatear un comentario. Abordemos la consulta de forma modular como una serie de subconjuntos que deben intersecarse. Veamos cuánto tarda cada uno de estos en ejecutarse (por favor informe). Sustituya sus marcas de tiempo por t1 y t2. Observe cómo cada consulta se basa en la anterior, lo que la convierte en una "vista en línea".

EDITAR:también, confirme las columnas en la tabla 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