Consultar as últimas N linhas relacionadas por linha
Eu tenho a seguinte consulta que busca oid
dos últimos Nobservations
para cadastation
:
SELECT id
FROM (
SELECT station_id, id, created_at,
row_number() OVER(PARTITION BY station_id
ORDER BY created_at DESC) AS rn
FROM (
SELECT station_id, id, created_at
FROM observations
) s
) s
WHERE rn <= #{n}
ORDER BY station_id, created_at DESC;
Eu tenho índices emid
, station_id
, created_at
.
Esta é a única solução que encontrei que pode buscar mais de um único registro por estação. No entanto, é bastante lento (154,0 ms para uma tabela de 81000 registros).
Como posso acelerar a consulta?