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
即任何一个月的最后一天都有属性次日是一个月的第一天
我有一个 table (postgres aurora),有 7200 万行,每个 as_at_date
.
我希望能够 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
即任何一个月的最后一天都有属性次日是一个月的第一天