Postgres - 优化获取所有记录,其中as_at_date是EOM。

问题描述 投票:0回答:1

我有一张表(postgres aurora),有7200万行,大概每行10万行。as_at_date.

我希望能够选择所有的数据,这些数据有 as_at_date 值,是月末的。如:3042018、31122019等,并返回所有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%以上的执行时间(大概31s中的30s)。

有没有一种更理想的方法来获取月末的as_at_dates来加快这个速度?

谢谢你的帮助。

sql postgresql amazon-rds-aurora
1个回答
1
投票

一种方法是。

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

就是任何月份的最后一天都有一个属性 就是第二天是一个月的第一天

© www.soinside.com 2019 - 2024. All rights reserved.