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?

questionAnswers(2)

yourAnswerToTheQuestion