我有一个表,其中包含几 TB 的事件数据,采用非常简单的(id、bucket_id、data、created_at)模式,并且有一个像这样的索引
create index index_events_on_created_at_and_bucket_id
on public.events (created_at desc, bucket_id asc);
现在我认为使用如下查询可以快速找到每个存储桶中最新事件的 id:
select max(created_at), bucket_id from events group by bucket_id;
解释输出:
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)
它似乎正在使用索引,但是进行索引扫描,而不是像我预期的那样仅仅获取头值。无论哪种方式,它都无法及时完成。我认为这是在查询中使用聚合函数的问题,但我不知道如何修复它。
created_at
是否有一个查询可以通过从该索引中获取每个存储桶来返回最新的(即索引中的第一个)时间戳?