postgres-optimize获取所有行,其中as\u at\u date是eom

vltsax25  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(324)

我有一个表(postgresaurora),有7200万行,每行大约10万行 as_at_date .
我希望能够选择所有数据 as_at_date 值,即月末的值。例如,30/4/2018、31/12/2019等,并返回所有10万*n行。
实际上,我用这个来处理以下查询;

  1. SELECT *
  2. FROM schema.table
  3. WHERE as_at_date >= '2019-07-01'
  4. AND as_at_date IN
  5. (
  6. SELECT max(as_at_date)
  7. FROM schema.table
  8. GROUP BY date_part('month', as_at_date), date_part('year', as_at_date)
  9. )

然而,内部select只是为了获取外部select语句的max as\u at\u dates列表,它占用了95%以上的执行时间(大约是31秒中的30秒)。
有没有一个更理想的方法让月底的日期加快这一点?
谢谢你的帮助。

siotufzp

siotufzp1#

一种方法是:

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

也就是说,任何一个月的最后一天都具有这样的属性:第二天是一个月的第一天。

相关问题