我有一张表(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来加快这个速度?
谢谢你的帮助。
一种方法是。
where extract(day from as_at_date + interval '1 day') = 1
就是任何月份的最后一天都有一个属性 就是第二天是一个月的第一天