Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 93F4A6503C5 for ; Tue, 18 Nov 2008 19:27:35 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 95842-03 for ; Tue, 18 Nov 2008 19:27:32 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from s402.sureserver.com (s402.sureserver.com [216.35.197.71]) by mail.postgresql.org (Postfix) with ESMTP id C38B86503D0 for ; Tue, 18 Nov 2008 19:27:31 -0400 (AST) Received: (qmail 13555 invoked by uid 504); 18 Nov 2008 23:27:29 -0000 Received: from unknown (HELO ?97.0.177.44?) (mailing?lists@70.102.219.22) by ns1.s402.sureserver.com with ESMTPA; 18 Nov 2008 23:27:29 -0000 Subject: Re: Performance and IN clauses From: Mark Roberts To: tv@fuzzy.cz Cc: Matthew Wakeling , pgsql-performance@postgresql.org In-Reply-To: <64433.89.102.139.23.1227026325.squirrel@sq.gransy.com> References: <64433.89.102.139.23.1227026325.squirrel@sq.gransy.com> Content-Type: text/plain Date: Tue, 18 Nov 2008 15:29:25 -0800 Message-Id: <1227050965.30763.7754.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.12.1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200811/158 X-Sequence-Number: 31889 On Tue, 2008-11-18 at 17:38 +0100, tv@fuzzy.cz wrote: > I bet there is no 'critical' length - this is just another case of > index > scan vs. seqscan. The efficiency depends on the size of the table / > row, > amount of data in the table, variability of the column used in the IN > clause, etc. > > Splitting the query with 1000 items into 10 separate queries, the > smaller > queries may be faster but the total time consumed may be actually > higher. > Something like > > 10 * (time of small query) + (time to combine them) > (time of large > query) > > If the performance of the 'split' solution is actually better than the > original query, it just means that the planner does not use index scan > when it actually should. That means that either > > (a) the planner is not smart enough > (b) it has not current statistics of the table (run ANALYZE on the > table) > (c) the statistics are not detailed enough (ALTER TABLE ... SET > STATICTICS) > (d) the cost variables are not set properly (do not match the hardware > - > decreate index scan cost / increase seq scan cost) > > regards > Tomas I know that it's much faster (for us) to run many smaller queries than one large query, and I think that it's primarily because of your reason a. Most of our problems come from Pg misunderstanding the results of a join and making a bad plan decision. Batching dramatically reduces the liklihood of this. -Mark