Received: from maia.hub.org (maia-3.hub.org [200.46.204.243]) by mail.postgresql.org (Postfix) with ESMTP id BFCD11337B9C for ; Fri, 28 Jan 2011 17:19:40 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.243]) (amavisd-maia, port 10024) with ESMTP id 67841-01 for ; Fri, 28 Jan 2011 21:19:33 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.anarazel.de (mail.anarazel.de [217.115.131.40]) by mail.postgresql.org (Postfix) with ESMTP id 6685C1337B96 for ; Fri, 28 Jan 2011 17:19:33 -0400 (AST) Received: from alap2.localnet (p579FBAA1.dip.t-dialin.net [87.159.186.161]) by mail.anarazel.de (Postfix) with ESMTPSA id CA18C448003; Fri, 28 Jan 2011 22:19:31 +0100 (CET) From: Andres Freund To: pgsql-performance@postgresql.org Subject: Re: postgres 9 query performance Date: Fri, 28 Jan 2011 22:19:29 +0100 User-Agent: KMail/1.13.5 (Linux/2.6.38-rc2-andres-00244-gbffb276; KDE/4.6.0; x86_64; ; ) Cc: yazan suleiman References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Message-Id: <201101282219.29777.andres@anarazel.de> 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/328 X-Sequence-Number: 42115 On Friday, January 28, 2011 06:30:19 PM yazan suleiman wrote: > I am evaluating postgres 9 to migrate away from Oracle. The following > query runs too slow, also please find the explain plan: First: explain analyze SELECT DISTINCT EVENT.ID ,ORIGIN.ID AS ORIGINID ,EVENT.PREFERRED_ORIGIN_ID AS PREFERRED_ORIGIN ,EVENT.CONTRIBUTOR ,ORIGIN.TIME ,ORIGIN.LATITUDE ,ORIGIN.LONGITUDE ,ORIGIN.DEPTH ,ORIGIN.EVTYPE ,ORIGIN.CATALOG ,ORIGIN.AUTHOR OAUTHOR ,ORIGIN.CONTRIBUTOR OCONTRIBUTOR ,MAGNITUDE.ID AS MAGID ,MAGNITUDE.MAGNITUDE ,MAGNITUDE.TYPE AS MAGTYPE FROM event.event left join event.origin on event.id = origin.eventid left join event.magnitude on origin.id = event.magnitude.origin_id WHERE EXISTS( select origin_id from event.magnitude where magnitude.magnitude >= 7.2 and origin.id = origin_id ) order by ORIGIN.TIME desc ,MAGNITUDE.MAGNITUDE desc ,EVENT.ID ,EVENT.PREFERRED_ORIGIN_ID ,ORIGIN.ID I am honestly stumped if anybody can figure something sensible out of the original formatting of the query... What happens if you change the left join event.origin on event.id = origin.eventid into join event.origin on event.id = origin.eventid ? The EXISTS() requires that origin is not null anyway. (Not sure why the planner doesn't recognize that though). Andres