Postgres - 优化获取所有行,其中 as_at_date 是 EOM

Postgres - Optimise get all rows where as_at_date is the EOM

我有一个 table (postgres aurora),有 7200 万行,每个 as_at_date.

大约 10 万行

我希望能够 select 所有具有 as_at_date 月末值的数据。例如。 2018 年 4 月 30 日、2019 年 12 月 31 日等以及 return 所有 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)
)

然而,内部 select 只是为了获取外部 select 语句的最大 as_at_dates 列表占用了 95% 以上的执行时间(大约 31 秒中的 30 秒)。

是否有更优化的方法来获得月底 as_at_dates 以加快速度?

感谢您的帮助。

一种方法是:

where extract(day from as_at_date + interval '1 day') = 1

即任何一个月的最后一天都有属性次日是一个月的第一天