Feature request: optimizer improvement

From: Joe Love <joe(at)primoweb(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Feature request: optimizer improvement
Date: 2013-10-31 16:04:57
Message-ID: CAK3BLoSan3o2a9kLVDetkor-zyqn-1jmc0Y-rPtiS9a+uFL-uA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

In postgres 9.2 I have a function that is relatively expensive. When I
write a query such as:

select expensive_function(o.id),o.* from offeirng o where valid='Y' order
by name limit 1;

the query runs slow and appears to be running the function on each ID,
which in this case should be totally unnecessary as it really only needs to
run on 1 row.

When I rewrite the query like so:

select expensive_function(o.id), o.*
from (select *offering where valid='Y' order by name limit 1) o;

the expensive function only runs once and thus, much faster. I would think
that the optimizer could handle this situation, especially when limit or
offset is used and the expensive function is not used in a group by, order
by or where.

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2013-10-31 16:21:31 shared memory message queues
Previous Message Antonin Houska 2013-10-31 15:46:25 Reference to parent query from ANY sublink