Postgres内部查询性能

时间:2016-11-18 16:06:05

标签: sql performance postgresql group-by

我有一张桌子,我需要从这个规则中选择一切:

id = 4524522000143 and validPoint = true
and date >  (max(date)- interval '12 month')
-- the max date, is the max date for this id

解释规则:我必须获取所有寄存器并计算它们,它们必须至少距离最新寄存器1年。

这是我的实际查询:

WITH points as (
    select 1 as ct from base_faturamento_mensal
    where id = 4524522000143 and validPoint = true
    group by id,date
    having date >  (max(date)- interval '12 month')
)  select sum(ct) from points

有更有效的方法吗?

1 个答案:

答案 0 :(得分:2)

你的查询正在使用诀窍,在HAVING子句中包含一个非聚合列,但我发现它并不特别糟糕。看起来很好,但如果没有EXPLAIN ANALYZE <query>输出,我就不能多说了。

要做的一件事是你可以摆脱CTE并在同一个查询中使用count(*)而不是返回1,然后在其上运行sum

select count(*) as ct
from base_faturamento_mensal
where id = 4524522000143 
  and validPoint = true
group by id, date
having date > max(date) - interval '12 months'