PostgreSQL-如何使简单查询更快

时间:2018-08-21 19:07:06

标签: sql postgresql

我有一个在600毫秒内完成的查询。 如何改进-我认为与日期比较是关键

select 
sensor_id,
sum(val) 
from tests 
where 
sensor_id in (34,35) --index on this column
and date_trunc('month', audit_date) = date_trunc('month', current_date)
group by sensor_id;

enter image description here

2 个答案:

答案 0 :(得分:5)

只是对Lukasz Szozda的回答,我觉得很好。

如果由于某种原因您不能修改SQL,则可以在PostgreSQL中创建具有特定列和/或列表达式组合的索引。就您而言:

create index ix1 on tests (sensor_id, date_trunc('month', audit_date));

有了此索引,您可以直接使用现有的SQL,并获得高性能。

答案 1 :(得分:4)

您可以使表达式date_trunc('month', audit_date)易于使用:

select 
   sensor_id,
   sum(val) 
from tests 
where sensor_id in (34,35) --index on this column
  and audit_date >= cast(date_trunc('month', current_date) as date)
  and audit_date < cast(date_trunc('month', current_date) as date)
                   + interval '1 month'
group by sensor_id;

并创建索引:

CREATE INDEX idx ON tests(sensor_id, audit_date);