pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: bricklen <bricklen@gmail.com>
Cc: pgsql-performance@postgresql.org
Subject: Re: Huge overestimation in rows expected results in bad plan
Date: Tue, 09 Nov 2010 18:55:12 -0500
Message-ID: <20765.1289346912@sss.pgh.pa.us> (raw)
In-Reply-To: <AANLkTimxv5HeSSuL5_+6bUDvicE39wNheToT2Ow3mC1x@mail.gmail.com>
References: <AANLkTim=JS-tu5G1CvrPnvfSTj7=YSxu=kwNUP+hLVfG@mail.gmail.com>
	<20388.1289345380@sss.pgh.pa.us>
	<AANLkTimxv5HeSSuL5_+6bUDvicE39wNheToT2Ow3mC1x@mail.gmail.com>

bricklen <bricklen@gmail.com> writes:
> On Tue, Nov 9, 2010 at 3:29 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> The query doesn't seem to match the plan.  Where is that OR (c.id =
>> 38441828354::bigint) condition coming from?

> Ah sorry, I was testing it with and without that part. Here is the
> corrected query, with that as part of the join condition:

> explain analyze
> select c.id, c.transactionid, c.clickgenerated, c.confirmed,
> c.rejected, cr.rejectedreason
> from conversion c
> inner join conversionrejected cr on cr.idconversion = c.id or c.id = 38441828354
> where date = '2010-11-06'
> and idaction = 12906
> and idaffiliate = 198338
> order by transactionid;

Hm.  Well, the trouble with that query is that if there is any
conversion row with c.id = 38441828354, it will join to *every* row of
conversionrejected.  The planner not unreasonably assumes there will be
at least one such row, so it comes up with a join size estimate that's
>= size of conversionrejected; and it also tends to favor a seqscan
since it thinks it's going to have to visit every row of
conversionrejected anyway.

If you have reason to think the c.id = 38441828354 test is usually dead
code, you might see if you can get rid of it, or at least rearrange the
query as a UNION of two independent joins.

			regards, tom lane



view thread (7+ messages)  latest in thread

Message-ID: <20765.1289346912@sss.pgh.pa.us>
Permalink:  ../20765.1289346912@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/20765.1289346912@sss.pgh.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: tgl@sss.pgh.pa.us, bricklen@gmail.com
  Subject: Re: Huge overestimation in rows expected results in bad plan
  In-Reply-To: <20765.1289346912@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox