Received: from localhost (maia-1.hub.org [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id 25DF19FB470 for ; Fri, 6 Apr 2007 18:31:59 -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 71329-03 for ; Fri, 6 Apr 2007 18:31:55 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from tigger.fuhr.org (tigger.fuhr.org [63.214.45.158]) by postgresql.org (Postfix) with ESMTP id 709FC9FB466 for ; Fri, 6 Apr 2007 18:31:55 -0300 (ADT) Received: from winnie.fuhr.org (winnie.fuhr.org [10.1.0.1]) by tigger.fuhr.org (8.13.8/8.13.8) with ESMTP id l36LVmSv010692 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 6 Apr 2007 15:31:51 -0600 (MDT) Received: from winnie.fuhr.org (localhost [127.0.0.1]) by winnie.fuhr.org (8.13.8/8.13.8) with ESMTP id l36LVmmv012855; Fri, 6 Apr 2007 15:31:48 -0600 (MDT) (envelope-from mfuhr@winnie.fuhr.org) Received: (from mfuhr@localhost) by winnie.fuhr.org (8.13.8/8.13.8/Submit) id l36LVlBn012854; Fri, 6 Apr 2007 15:31:47 -0600 (MDT) (envelope-from mfuhr) Date: Fri, 6 Apr 2007 15:31:47 -0600 From: Michael Fuhr To: Alex Deucher Cc: PostgreSQL Performance Subject: Re: postgres 8.2 seems to prefer Seq Scan Message-ID: <20070406213147.GA12788@winnie.fuhr.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200704/181 X-Sequence-Number: 24058 On Fri, Apr 06, 2007 at 04:38:33PM -0400, Alex Deucher wrote: > One more anomaly between 7.4 and 8.2. DB dumped from 7.4 and loaded > onto 8.2, both have locale set to C. 8.2 seems to prefer Seq Scans > for the first query while the ordering in the second query seems to > perform worse on 8.2. I ran analyze. I've tried with the encoding > set to UTF-8 and SQL_ASCII; same numbers and plans. Any ideas how to > improve this? Are you sure the data sets are identical? The 7.4 query returned 0 rows; the 8.2 query returned 1 row. If you're running the same query against the same data in both versions then at least one of them appears to be returning the wrong result. Exactly which versions of 7.4 and 8.2 are you running? Have you analyzed all tables in both versions? The row count estimate in 7.4 is much closer to reality than in 8.2: 7.4 > -> Index Scan using pnum_idx on event (cost=0.00..3.37 rows=19 > width=172) (actual time=0.063..0.063 rows=0 loops=1) > Index Cond: ((pnum)::text = 'AB5819188'::text) 8.2 > -> Index Scan using pnum_idx on event (cost=0.00..3147.63 > rows=1779 width=171) (actual time=0.030..0.033 rows=1 loops=1) > Index Cond: ((pnum)::text = 'AB5819188'::text) If analyzing the event table doesn't improve the row count estimate then try increasing the statistics target for event.pnum and analyzing again. Example: ALTER TABLE event ALTER pnum SET STATISTICS 100; ANALYZE event; You can set the statistics target as high as 1000 to get more accurate results at the cost of longer ANALYZE times. -- Michael Fuhr