我有一个表(postgres aurora(,有7200万行,每个as_at_date
大约有100k行。
我希望能够选择具有月底as_at_date
值的所有数据。例如。30/4/2018、31/12/2019 等,并返回所有 100k * N 行。
我实际上可以使用以下查询;
SELECT *
FROM schema.table
WHERE as_at_date >= '2019-07-01'
AND as_at_date IN
(
SELECT max(as_at_date)
FROM schema.table
GROUP BY date_part('month', as_at_date), date_part('year', as_at_date)
)
然而,仅仅为了获取外部选择语句的最大as_at_dates列表的内部选择占用了 95%+ 的执行时间(大约 31 秒中的 30 秒(。
有没有更优化的方法可以让月底as_at_dates加快速度?
感谢您的帮助。
一种方法是:
where extract(day from as_at_date + interval '1 day') = 1
也就是说,任何月份的最后一天都具有第二天是一个月的第一天的属性。