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

Sql Postgres-优化获取所有行,其中as_at_date是EOM,sql,postgresql,amazon-aurora,Sql,Postgresql,Amazon Aurora,我有一个表postgres aurora,有7200万行,每个as_在_日期大约有10万行 我希望能够选择所有具有月底as_at_date值的数据。例如2018年4月30日、2019年12月31日等,并返回所有10万行*N行 实际上,我用下面的查询处理这个问题 SELECT * FROM schema.table WHERE as_at_date >= '2019-07-01' AND as_at_date IN ( SELECT max(as_at_date) FROM sche

我有一个表postgres aurora,有7200万行,每个as_在_日期大约有10万行

我希望能够选择所有具有月底as_at_date值的数据。例如2018年4月30日、2019年12月31日等,并返回所有10万行*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语句的max as_at_dates列表,它占用了95%以上的执行时间,大约是31秒中的30秒

有没有更理想的方式让月末的日期加快

感谢您的帮助。

一种方法是:

where extract(day from as_at_date + interval '1 day') = 1
也就是说,任何月份的最后一天都具有这样的属性:第二天是一个月的第一天