Received: from magus.postgresql.org ([87.238.57.229]) by malur.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TH12e-0003vc-Rj for pgsql-general@postgresql.org; Wed, 26 Sep 2012 23:29:20 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by magus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TH12b-0002DF-8K for pgsql-general@postgresql.org; Wed, 26 Sep 2012 23:29:20 +0000 Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.5/8.14.5) with ESMTP id q8QNTE16006927; Wed, 26 Sep 2012 19:29:14 -0400 (EDT) From: Tom Lane To: Edson Richter cc: pgsql-general@postgresql.org Subject: Re: [PERFORM] Inaccurate Explain Cost In-reply-to: References: <50635F77.60008@optionshouse.com> Comments: In-reply-to Edson Richter message dated "Wed, 26 Sep 2012 17:20:01 -0300" Date: Wed, 26 Sep 2012 19:29:14 -0400 Message-ID: <6926.1348702154@sss.pgh.pa.us> X-Pg-Spam-Score: -2.7 (--) X-Archive-Number: 201209/854 X-Sequence-Number: 190870 Edson Richter writes: >> That said, looking at your actual query: >> >> SELECT COUNT(DISTINCT eu.id) >> FROM exchange_uploads eu >> JOIN upload_destinations ud ON ud.id = eu.upload_destination_id >> LEFT JOIN uploads u ON u.id = eu.upload_id >> LEFT JOIN import_errors ie ON ie.exchange_upload_id = eu.id >> LEFT JOIN exchanges e ON e.id = ud.exchange_id >> WHERE eu.created_at >= '2012-07-27 21:21:57.363944' >> AND ud.office_id = 6; >> >> Doesn't need half of these joins. They're left joins, and never used >> in the query results or where criteria. You could just use this: > Interesting. I've similar situation, where user can choose a set of > filters, and then the query must have several left joins "just in case" > (user need in the filer). > I know other database that is able to remove unnecessary outer joins > from queries when they are not relevant and for instance become faster. > Can't PostgreSQL do the same? It does, and did - note the query plan is only scanning 3 of the 5 tables mentioned in the query. (The other left join appears to be to a non-unique column, which makes it not redundant.) regards, tom lane