On Fri, Apr 23, 2010 at 4:42 PM, Eliot Gable <egable+pgsql-performance@xxxxxxxxx> wrote: > To answer the question of whether calling a stored procedure adds any > significant overhead, I built a test case and the short answer is that it > seems that it does: > > CREATE OR REPLACE FUNCTION Test1() RETURNS INTEGER AS > $BODY$ > DECLARE > temp INTEGER; > BEGIN > FOR i IN 1..1000 LOOP > SELECT 1 AS id INTO temp; > END LOOP; > RETURN 1; > END; > $BODY$ > LANGUAGE plpgsql; > > CREATE OR REPLACE FUNCTION Test2A() RETURNS SETOF INTEGER AS > $BODY$ > DECLARE > BEGIN > RETURN QUERY SELECT 1 AS id; > END; > $BODY$ > LANGUAGE plpgsql; > > CREATE OR REPLACE FUNCTION Test2B() RETURNS INTEGER AS > $BODY$ > DECLARE > temp INTEGER; > BEGIN > FOR i IN 1..1000 LOOP > temp := Test2A(); > END LOOP; > RETURN 1; > END; > $BODY$ > LANGUAGE plpgsql; > > > EXPLAIN ANALYZE SELECT * FROM Test1(); > "Function Scan on test1 (cost=0.00..0.26 rows=1 width=4) (actual > time=6.568..6.569 rows=1 loops=1)" > "Total runtime: 6.585 ms" > > > EXPLAIN ANALYZE SELECT * FROM Test2B(); > "Function Scan on test2b (cost=0.00..0.26 rows=1 width=4) (actual > time=29.006..29.007 rows=1 loops=1)" > "Total runtime: 29.020 ms" That's not a fair test. test2a() is a SRF which has higher overhead than regular function. Try it this way and the timings will level out: CREATE OR REPLACE FUNCTION Test2A() RETURNS INTEGER AS $BODY$ DECLARE BEGIN RETURN 1 ; END; $BODY$ LANGUAGE plpgsql ; merlin -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance