Postgres - 优化获取as_at_date是 EOM 的所有行



我有一个表(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

也就是说,任何月份的最后一天都具有第二天是一个月的第一天的属性。

相关内容

最新更新