On Jul 6, 2012, at 9:24 PM, Gurjeet Singh wrote:

> On Thu, Jul 5, 2012 at 7:16 PM, Steven Schlansker <ste...@likeness.com> wrote:
> 
> On Jul 5, 2012, at 3:51 PM, Tom Lane wrote:
> 
> > Steven Schlansker <ste...@likeness.com> writes:
> >> Why is using an OR so awful here?
> >
> > Because the OR stops it from being a join (it possibly needs to return
> > some rows that are not in the semijoin of the two tables).
> >
> >> Why does it pick a sequential scan?  Is this an optimizer bug
> >
> > No.  It can't transform OR into a UNION because the results might not
> > be the same.  I assume you don't care about removal of duplicates, or
> > have some reason to know that there won't be any ... but the planner
> > doesn't know that.
> >
> 
> Thanks for the insight here.  It still seems unfortunate that it picks a
> sequential scan -- but if there really is no more efficient way to do this,
> I will just rewrite the query.
> 
> It might not be applicable to this case (because of the use of ANY in second 
> branch of OR clause), but some databases provide a feature called 
> OR-Optimization, where the optimizer breaks up the query at OR clause 
> boundaries and uses UNION ALL operator to join the resulting queries, just 
> like you did. Optimizer does need to add additional AND clauses to some of 
> the branches to make sure the result set is not affected.
> 

That sounds like a great optimization for Postgres, but unfortunately it's far 
outside of my skill set / time to contribute, so I'd have to wait for a "real" 
PG dev to get to it :)

> Just a thought.
> -- 
> Gurjeet Singh
> EnterpriseDB Corporation
> The Enterprise PostgreSQL Company
> 


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to