optimizer question

Started by Michael Meskesabout 23 years ago2 messages
#1Michael Meskes
meskes@postgresql.org

Hi,

I was just approached with an optimizer question I cannot answer. Does
our optimizer know how expensive different comparisons are? That is can
it do something like:

If there are different comparisons in a where clause check the ints
first, then the strings, then everything with regexp, or like clauses
etc. and finally function calls at last, because in most cases a
function call is the most expensive one.

Okay, we may argue whether a regexp is more expensive than a function,
but you get the idea. Are we able to get that logic in where clauses
where no index is defined? I just tried a query that given the order in
the where clause either takes a few seconds or forever. Well, I killed
the query after quite some time.

Michael
--
Michael Meskes
Michael@Fam-Meskes.De
Go SF 49ers! Go Rhein Fire!
Use Debian GNU/Linux! Use PostgreSQL!

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Meskes (#1)
Re: optimizer question

Michael Meskes <meskes@postgresql.org> writes:

I was just approached with an optimizer question I cannot answer. Does
our optimizer know how expensive different comparisons are?

It does not, because there's noplace it could look to find the info.

If there are different comparisons in a where clause check the ints
first, then the strings, then everything with regexp, or like clauses
etc. and finally function calls at last, because in most cases a
function call is the most expensive one.

Unfortunately, these all look like function calls to the optimizer.

I have played with the notion of forcing subquery-based WHERE clauses
to the end of the list, but that's about all that we could easily manage
without great leaps of assumptions...

regards, tom lane