Received: from localhost (maia-4.hub.org [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 7FCB89FBE0A for ; Fri, 4 May 2007 12:11:16 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 85350-06 for ; Fri, 4 May 2007 12:11:13 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from exchange.g2switchworks.com (mail.g2switchworks.com [63.87.162.25]) by postgresql.org (Postfix) with ESMTP id A09D59FB410 for ; Fri, 4 May 2007 12:11:13 -0300 (ADT) Received: from 10.10.1.37 ([10.10.1.37]) by exchange.g2switchworks.com ([10.10.1.2]) with Microsoft Exchange Server HTTP-DAV ; Fri, 4 May 2007 15:11:12 +0000 Received: from state.g2switchworks.com by mail.g2switchworks.com; 04 May 2007 10:11:12 -0500 Subject: Re: Query performance problems with partitioned tables From: Scott Marlowe To: Merlin Moncure Cc: Fei Liu , Andreas Haumer , pgsql-performance@postgresql.org In-Reply-To: References: <4635D678.3050205@xss.co.at> <4639F97D.3080003@aepnetworks.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit Message-Id: <1178291472.2953.47.camel@state.g2switchworks.com> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Fri, 04 May 2007 10:11:12 -0500 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200705/45 X-Sequence-Number: 24435 On Thu, 2007-05-03 at 21:37, Merlin Moncure wrote: > On 5/3/07, Fei Liu wrote: > > Hello, Andreas, I too am having exactly the same issue as you do. > > Comparing my partitioned and plain table performance, I've found that > > the plain tables perform about 25% faster than partitioned table. Using > > 'explain select ...', I see that constraints are being used so in > > partitioned tables fewer rows are examined. But still partitioned tables > > are 25% slower, what a let down. > > That's a little bit harsh. The main use of partitioning is not to > make the table faster but to make the maintenance easier. When > constraint exclusion works well for a particular query you can get a > small boost but many queries will break down in a really negative way. > So, you are sacrificing flexibility for easier maintenance. You have > to really be careful how you use it. > > The best case for partitioning is when you can logically divide up > your data so that you really only have to deal with one sliver of it > at a time...for joins and such. If the OP could force the constraint > exclusion (maybe by hashing the timestamp down to a period and using > that for where clause), his query would be fine. The problem is it's > not always easy to do that. Agree++ I've been testing partitioning for a zip code lookup thing that was posted here earlier, and I partitioned a 10,000,000 row set into about 400 partitions. I found that selecting a range of areas defined by x/y coordinates was faster without any indexes. The same selection with one big table and one big (x,y) index took 3 to 10 seconds typically, same select against the partitions with no indexes took 0.2 to 0.5 seconds. For that particular application, the only way to scale it was with partitioning.