Mystery: functions are slow with group by, but...

Поиск
Список
Период
Сортировка
От Allan Kelly
Тема Mystery: functions are slow with group by, but...
Дата
Msg-id 38FC7C4D.7D8E1C12@buildstore.co.uk
обсуждение исходный текст
Ответы Re: Mystery: functions are slow with group by, but...  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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.70rows=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.kelly@buildstore.co.uk...    ..# /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  : .
 


В списке pgsql-sql по дате отправления:

Предыдущее
От: "Moray McConnachie"
Дата:
Сообщение: Re: One query for two information...
Следующее
От: "Michael S. Kelly"
Дата:
Сообщение: Outer joins