Received: from localhost (maia-1.hub.org [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id 058D29F96BC for ; Sat, 18 Aug 2007 04:08:07 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.191]) (amavisd-maia, port 10024) with ESMTP id 14102-01 for ; Sat, 18 Aug 2007 04:08:03 -0300 (ADT) X-Greylist: delayed 00:27:28.266031 by SQLgrey-1.7.5 Received: from mustang.sdc.com.au (mustang.sdc.com.au [203.2.199.1]) by postgresql.org (Postfix) with ESMTP id 2526C9F96A0 for ; Sat, 18 Aug 2007 04:08:01 -0300 (ADT) Received: from localhost (localhost [127.0.0.1]) by mustang.sdc.com.au (8.13.3/8.13.0) with ESMTP id l7I6eTSW010625 for ; Sat, 18 Aug 2007 16:10:29 +0930 From: Stephen Davies Organization: Stephen Davies Consulting P/L To: pgsql-interfaces@postgresql.org Subject: Query performance Date: Sat, 18 Aug 2007 16:10:28 +0930 User-Agent: KMail/1.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200708181610.28918.sdc@sdc.com.au> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.001 tagged_above=0 required=5 tests=BAYES_50=0.001 X-Spam-Level: X-Archive-Number: 200708/5 X-Sequence-Number: 6599 I have a table with some seven million rows. The query: select count(rdate),rdate from reading where sensor_id in (1137,1138,1139) group by rdate order by rdate desc limit 1; takes a few seconds but: select count(rdate),rdate from reading where sensor_id in (1137,1138,1139,1140) group by rdate order by rdate desc limit 1; (anything with four or more values in the "in" list) takes several minutes. Is there any way to make the "larger" queries more efficient? Both rdate and sensor_id are indexed and the database is vacuumed every night. Explain outputs are: benparts=# explain select count(rdate),rdate from reading where sensor_id in (1137,1138,1139,1140) group by rdate order by rdate desc limit 1; QUERY PLAN --------------------------------------------------------------------------------------------------- Limit (cost=0.00..39890.96 rows=1 width=8) -> GroupAggregate (cost=0.00..7938300.21 rows=199 width=8) -> Index Scan Backward using date on reading (cost=0.00..7937884.59 rows=82625 width=8) Filter: (sensor_id = ANY ('{1137,1138,1139,1140}'::integer[])) (4 rows) benparts=# explain select count(rdate),rdate from reading where sensor_id in (1137,1138,1139) group by rdate order by rdate desc limit 1; QUERY PLAN ----------------------------------------------------------------------------------------------------- Limit (cost=48364.32..48364.32 rows=1 width=8) -> Sort (cost=48364.32..48364.49 rows=69 width=8) Sort Key: rdate -> HashAggregate (cost=48361.35..48362.21 rows=69 width=8) -> Bitmap Heap Scan on reading (cost=535.53..48218.10 rows=28650 width=8) Recheck Cond: (sensor_id = ANY ('{1137,1138,1139}'::integer[])) -> Bitmap Index Scan on reading_sensor (cost=0.00..528.37 rows=28650 width=0) Index Cond: (sensor_id = ANY ('{1137,1138,1139}'::integer[])) (8 rows) TIA, Stephen Davies -- ======================================================================== This email is for the person(s) identified above, and is confidential to the sender and the person(s). No one else is authorised to use or disseminate this email or its contents. Stephen Davies Consulting Voice: 08-8177 1595 Adelaide, South Australia. Fax: 08-8177 0133 Computing & Network solutions. Mobile:0403 0405 83