On Oct 31, 2013, at 11:04 AM, Joe Love <j...@primoweb.com> wrote:
> 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.

Does anyone know what the SQL standard says about this, if anything? I can't 
see any way that this would change the result set, but of course if the 
function has external effects this would make a difference...

Reply via email to