From: | Allan Kelly <allan(dot)kelly(at)buildstore(dot)co(dot)uk> |
---|---|
To: | "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org> |
Subject: | Mystery: functions are slow with group by, but... |
Date: | 2000-04-18 15:16:29 |
Message-ID: | 38FC7C4D.7D8E1C12@buildstore.co.uk |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hi there. I appear to have much quicker performance by asking for more work!
First of all, though: can I see the definition of a function in psql?
\df total_live_a4_properties( text )
just gives me the args, return type etc. Hox can I see the AS '...' clause?
Q2:
I have a big performance problem using a function:
create function total_live_a4_properties( text )
returns int4
as
'select count(*) from properties where
status<>''sold'' and status<>''suspended''
and a4 = $1'
language 'sql';
This takes 5-10 _minutes_ :
select a4, total_live_a4_properties( a4 )
from properties group by a4;
There are 5132 records in the properties table, and 64 distinct a4 values.
Explain gives
NOTICE: QUERY PLAN:
Group ( cost=411.70 rows=5112 width=12)
-> Sort ( cost=411.70 rows=5112 width=12)
-> Seq Scan on Properties ( cost=411.70 rows=5112 width=12)
However this next one is < 3 _seconds_!
select a4, count(*), (100*count(*)/total_live_a4_properties( a4 )) as percentage
from properties group by a4;
Explain gives
NOTICE: QUERY PLAN:
Aggregate ( cost=411.70 rows=5112 width=12)
Group ( cost=411.70 rows=5112 width=12)
-> Sort ( cost=411.70 rows=5112 width=12)
-> Seq Scan on Properties ( cost=411.70 rows=5112 width=12)
Can anyone tell me what's going on?
thanks, al.
--
# Allan Kelly http://www.plotsearch.co.uk
# (+44) (0)131 524 8500
# allan(dot)kelly(at)buildstore(dot)co(dot)uk(dot)(dot)(dot) ..
# /Software Engineer/i . . . . .
# ------------------------------ * . . . . .
# "If you are a Visual Basic programmer, * . . .
# these details are none of your business." * . . .
# Mr Bunny's Guide to Active X, by Carlton Egremont III * . .
# ------------------------------ vi: set noet tw=80 sts=4 ts=8 : .
From | Date | Subject | |
---|---|---|---|
Next Message | Moray McConnachie | 2000-04-18 15:31:27 | Re: One query for two information... |
Previous Message | Ed | 2000-04-18 14:26:25 | One query for two information... |