Oliver Siegmar wrote:
Hi,

I'm using PostgreSQL 7.3.4 and noticed a havy performance issue when
using the datatype text for PL/pgSQL functions instead of varchar.

This is the table:

CREATE TABLE user_login_table (
    id serial,
    username varchar(100),
    PRIMARY ID (id),
    UNIQUE (username)
);

This table contains ~ 500.000 records. The database runs on a P4 with
512 MB RAM. When using the following functions, I notice a havy
speed difference:


CREATE OR REPLACE FUNCTION get_foo_exists (varchar(100)) RETURNS bool AS ' BEGIN PERFORM username FROM user_login_table WHERE username = $1;

        RETURN FOUND;
    END;
'
LANGUAGE 'plpgsql';

CREATE OR REPLACE FUNCTION get_foo_exists2 (text)
RETURNS bool
AS '
    BEGIN
        PERFORM username
        FROM    user_login_table
        WHERE   username = $1;

        RETURN FOUND;
    END;
'
LANGUAGE 'plpgsql';



The function 'get_foo_exists (varchar(100))' is extremly fast
(can't estimate - < 0.5 seconds). The function 'get_foo_exists2 (text)'
takes about 3 seconds for the same operation.
Is that normal?

I don't know if it's normal for it to be that slow, but I would expect it to be slower.

Postgres has to convert the text to a varchar before it can actually
do anything.  It's possible (though I'm not sure) that it has to
do the conversion with each record it looks at.

Every language I know of hits performance issues when you have to
convert between types.  I wouldn't _think_ that it would be that
much work converting between text and varchar, but I'm not familiar
enough with the server code to know what's actually involved.

What kind of performance do you get if you accept a text value
and then manually convert it to a varchar?

i.e.

CREATE OR REPLACE FUNCTION get_foo_exists2 (text)
RETURNS bool
AS '
    DECLARE
        tempvar VARCHAR(100);
    BEGIN
        tempvar := $1;
        PERFORM username
        FROM    user_login_table
        WHERE   username = tempvar;

        RETURN FOUND;
    END;
'
LANGUAGE 'plpgsql';

--
Bill Moran
Potential Technologies
http://www.potentialtech.com


---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to