Received: from maia.hub.org (maia-2.hub.org [200.46.204.251]) by mail.postgresql.org (Postfix) with ESMTP id F22961337B6E for ; Thu, 13 Jan 2011 20:10:36 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.251]) (amavisd-maia, port 10024) with ESMTP id 70755-05 for ; Fri, 14 Jan 2011 00:10:30 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130]) by mail.postgresql.org (Postfix) with ESMTP id 91F001337B68 for ; Thu, 13 Jan 2011 20:10:29 -0400 (AST) Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.2/8.14.2) with ESMTP id p0E0AREF020542; Thu, 13 Jan 2011 19:10:27 -0500 (EST) To: Jon Nelson cc: Robert Haas , pgsql-performance@postgresql.org Subject: Re: queries with lots of UNIONed relations In-reply-to: References: <19302.1294938802@sss.pgh.pa.us> <4879.1294949144@sss.pgh.pa.us> <11563.1294957582@sss.pgh.pa.us> <18301.1294959904@sss.pgh.pa.us> Comments: In-reply-to Jon Nelson message dated "Thu, 13 Jan 2011 17:14:04 -0600" Date: Thu, 13 Jan 2011 19:10:27 -0500 Message-ID: <20541.1294963827@sss.pgh.pa.us> From: Tom Lane X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.91 tagged_above=-10 required=5 tests=BAYES_00=-1.9, T_RP_MATCHES_RCVD=-0.01 X-Spam-Level: X-Archive-Number: 201101/94 X-Sequence-Number: 41881 Jon Nelson writes: > On Thu, Jan 13, 2011 at 5:05 PM, Tom Lane wrote: >> If you have enough memory to de-dup them individually, you surely have >> enough to de-dup all at once. > If everything were available up-front, sure. > However, and please correct me if I'm wrong, but doesn't postgresql > work in a fairly linear fashion, moving from table to table performing > a series of operations on each? Doing a single sort+uniq works like that. But the alternate plan you are proposing we should consider involves building all the lower hashtables, and then reading from them to fill the upper hashtable. Max memory consumption *is* worst case here. Remember HashAggregate is incapable of swapping to disk (and if it did, you wouldn't be nearly as pleased with its performance). regards, tom lane