Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-sql by date

Next:From: Moray McConnachieDate: 2000-04-18 15:31:27
Subject: Re: One query for two information...
Previous:From: EdDate: 2000-04-18 14:26:25
Subject: One query for two information...

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group