Thread: Speeding up SELECT MAX(),... GROUP BY ... ?

Speeding up SELECT MAX(),... GROUP BY ... ?

From
Christoph Haller
Date:
Hi, 

I am having select statements which are running too slow. 
It's PostgreSQL 7.2.1 and a VACUUM ANALYZE was done. 
There are various where clauses restricting the output 
to timepoints and/or ids related to sources,locations,...
One statement looks like: 

EXPLAIN 
select max(timepoint),lid,mid,sid from onfvalue 
where  timepoint <= '2002-05-01 08:00:00'  and  sid in (1,3,5,7)  group by sid,lid,mid; 

NOTICE:  QUERY PLAN:

Aggregate  (cost=21044.07..22383.53 rows=13395 width=20) ->  Group  (cost=21044.07..22048.66 rows=133946 width=20)
->  Sort  (cost=21044.07..21044.07 rows=133946 width=20)             ->  Seq Scan on onfvalue  (cost=0.00..5530.24
rows=133946width=20)
 

Any ideas/alternatives to speed this up? 
The table 'onfvalue' is supposed to keep some million rows. 

Regards, Christoph 


Re: Speeding up SELECT MAX(),... GROUP BY ... ?

From
Josh Berkus
Date:
Chris,

> EXPLAIN
> select max(timepoint),lid,mid,sid from onfvalue
> where  timepoint <= '2002-05-01 08:00:00'  and  sid in (1,3,5,7)  group by
sid,lid,mid;

Having indexes on all four columns will help.  Beyond that, there's not a lot
you can do; aggregate queries are slow.  Rely on raw hardware power
(multi-channel SCSI, fast processor, lots of RAM and a very high sort_mem
setting).

BTW, if those four columns are the only data in the table, a Seq Scan is
actually the fastest method.

--
-Josh Berkus

______AGLIO DATABASE SOLUTIONS___________________________                                       Josh Berkus  Complete
informationtechnology     josh@agliodbs.com   and data management solutions     (415) 565-7293  for law firms, small
businesses     fax 621-2533   and non-profit organizations.     San Francisco