Re: [HACKERS] Re-ordering of OR conditions

2007-02-09 Thread Simon Riggs
On Fri, 2007-02-09 at 11:46 -0500, Tom Lane wrote:
> "Jim Nasby" <[EMAIL PROTECTED]> writes:
> > IF I run the following with the a < 2900 condition first, the more  
> > expensive EXISTS only gets executed when needed, but if I change the  
> > order of the OR's, the EXISTS is always executed. It would be good if  
> > the optimizer could re-order the OR conditions based on estimated  
> > cost (granted, this wouldn't work very well if you've got functions  
> > in the OR, but it'd still be useful):
> 
> I looked at this for a bit.  It's in principle do-able but I'm not
> sure it's a good idea.  The problem is that while AND'ed condition
> lists are usually fairly short and hence cheap to sort, OR'ed condition
> lists are not infrequently very long --- nobody blinks an eye at
> hundreds of items in an IN-list for instance.  I'm afraid we'd waste
> a lot more cycles sorting than we could hope to regain.

Seems like the planner could decide ahead of time whether sorting the
conditions at execution time was likely to be effective or not. Perhaps
limiting it to at most 5 conditions, where at least one of those was a
function or a join condition? That would be a fairly cheap test at
planning time, but potentially a good win at execution time. 

The OR'ed condition is common condition when the schema uses complex
sub-classing. Now we have function costs it seems more likely this idea
would get used in practice.

Anyway, not necessarily for you to do, but sounds like a useful idea all
the same.

-- 
  Simon Riggs 
  EnterpriseDB   http://www.enterprisedb.com



---(end of broadcast)---
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate


Re: [HACKERS] Re-ordering of OR conditions

2007-02-09 Thread Jim Nasby

On Feb 9, 2007, at 10:46 AM, Tom Lane wrote:

"Jim Nasby" <[EMAIL PROTECTED]> writes:

IF I run the following with the a < 2900 condition first, the more
expensive EXISTS only gets executed when needed, but if I change the
order of the OR's, the EXISTS is always executed. It would be good if
the optimizer could re-order the OR conditions based on estimated
cost (granted, this wouldn't work very well if you've got functions
in the OR, but it'd still be useful):


I looked at this for a bit.  It's in principle do-able but I'm not
sure it's a good idea.  The problem is that while AND'ed condition
lists are usually fairly short and hence cheap to sort, OR'ed  
condition

lists are not infrequently very long --- nobody blinks an eye at
hundreds of items in an IN-list for instance.  I'm afraid we'd waste
a lot more cycles sorting than we could hope to regain.


Do people actually do that with OR lists though? My understanding is  
that now IN lists are converted to arrays, so I'd think that wouldn't  
be an issue there.


Is it easy for the planner to discern between simple OR expressions  
and stuff like EXISTS? If so it might be worth automatically pushing  
EXISTS to the end...

--
Jim Nasby   [EMAIL PROTECTED]
EnterpriseDB  http://enterprisedb.com  512.569.9461 (cell)




---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [HACKERS] Re-ordering of OR conditions

2007-02-09 Thread Tom Lane
"Jim Nasby" <[EMAIL PROTECTED]> writes:
> IF I run the following with the a < 2900 condition first, the more  
> expensive EXISTS only gets executed when needed, but if I change the  
> order of the OR's, the EXISTS is always executed. It would be good if  
> the optimizer could re-order the OR conditions based on estimated  
> cost (granted, this wouldn't work very well if you've got functions  
> in the OR, but it'd still be useful):

I looked at this for a bit.  It's in principle do-able but I'm not
sure it's a good idea.  The problem is that while AND'ed condition
lists are usually fairly short and hence cheap to sort, OR'ed condition
lists are not infrequently very long --- nobody blinks an eye at
hundreds of items in an IN-list for instance.  I'm afraid we'd waste
a lot more cycles sorting than we could hope to regain.

regards, tom lane

---(end of broadcast)---
TIP 6: explain analyze is your friend