Eu tenho uma tabela com vários terabytes de dados de eventos em um esquema muito simples (id, bucket_id, data,created_at) e há um índice como este
create index index_events_on_created_at_and_bucket_id
on public.events (created_at desc, bucket_id asc);
Agora pensei que seria rápido encontrar o ID do evento mais recente em cada bucket com uma consulta como:
select max(created_at), bucket_id from events group by bucket_id;
Explique a saída:
HashAggregate (cost=170172168.62..170172178.41 rows=979 width=16)
Group Key: bucket_id
-> Index Only Scan using index_events_on_created_at_and_bucket_id on events (cost=0.70..156003994.34 rows=2833634856 width=16)
Parece estar usando o índice, mas fazendo uma varredura do índice em vez de apenas capturar o valor principal como eu esperava. De qualquer forma, ele não é concluído em tempo hábil. Suponho que seja um problema ao usar a função agregada na consulta, mas não sei como consertar.
Existe uma consulta que pode retornar o carimbo de data/hora mais recente (ou seja, o primeiro no índice) created_at
de cada intervalo, obtendo-o desse índice?