Thread: A Costly function + LIMIT

A Costly function + LIMIT

From
Chris Gamache
Date:
PostgreSQL 7.2.3

I have a function that is quite costly to run on 1000's of records... Let's
call it "widget". 

I have a query

(SELECT name, address, city, state, zip, widget(name, address, city, state,
zip) 
FROM eastern_usa 
ORDER BY state, city, zip, name 
LIMIT 5000)

UNION ALL

(SELECT name, address, city, state, zip, widget(name, address, city, state,
zip) 
FROM western_usa 
ORDER BY state, city, zip, name 
LIMIT 5000)

ORDER BY 4, 3, 5, 1 LIMIT 100 OFFSET 0;

It runs "widget" on 10000 records. The damage would be negligible if it could
run on the 100... 

Any ideas?

CG

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com


Re: A Costly function + LIMIT

From
Tom Lane
Date:
Chris Gamache <cgg007@yahoo.com> writes:
> It runs "widget" on 10000 records. The damage would be negligible if it could
> run on the 100... 

So do the function calculation outside the UNION/ORDER BY.

SELECT name, address, city, state, zip, widget(name, address, city, state,
zip)
FROM
((SELECT * FROM eastern_usa  ORDER BY state, city, zip, name  LIMIT 5000UNION ALL SELECT * FROM western_usa  ORDER BY
state,city, zip, name  LIMIT 5000)ORDER BY 4, 3, 5, 1 LIMIT 100 OFFSET 0) ss;
 

You might have to fool with the parenthesization a little to get it
to parse ...
        regards, tom lane