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

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 : .

Responses

Browse pgsql-sql by date

  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...