Re: Migration from DB2 to PostgreSQL - Mailing list pgsql-general

From Amit Langote
Subject Re: Migration from DB2 to PostgreSQL
Date
Msg-id CA+HiwqH4sSFiNau4tH+U18EL_VCv=ZCoXVzS=4mjz_r1yOue_g@mail.gmail.com
Whole thread Raw
In response to Re: Migration from DB2 to PostgreSQL  (Chris Angelico <rosuav@gmail.com>)
Responses Re: Migration from DB2 to PostgreSQL  (Chris Angelico <rosuav@gmail.com>)
List pgsql-general
Hi,

On Thu, Jun 20, 2013 at 10:27 AM, Chris Angelico <rosuav@gmail.com> wrote:
> On Thu, Jun 20, 2013 at 11:10 AM, Amit Langote <amitlangote09@gmail.com> wrote:
>> If this particular function is to be used repeatedly in a single
>> query, would the cost of having a wrapper function around the original
>> function be too large? For example, if this function appears in a
>> WHERE clause against a table containing millions of rows.
>
> If your wrapper function is written in SQL and is trivial (eg ignore
> the third parameter and pass the other two on), the planner should be
> able to optimize right through it. Best way to find out is with
> EXPLAIN, which I've been using a good bit lately. The optimizer's
> pretty smart.

For example consider following rough example:

postgres=# create table nums as select * from generate_series(1,1000000) as num;
SELECT
Time: 1185.589 ms
postgres=# select count(*) from nums where num > 3450;
 count
--------
 996550
(1 row)

Time: 183.987 ms

postgres=# create or replace function gt(n int, m int) returns boolean as $$
begin
return n > m;
end;
$$
language plpgsql;
CREATE FUNCTION
Time: 1.080 ms

postgres=# select count(*) from nums where gt(num, 3450);
 count
--------
 996550
(1 row)

Time: 1327.800 ms

postgres=# create or replace function gt3(n int, m int, o int) returns
boolean as $$
begin
return gt(n, m);
end;
$$
language plpgsql;
CREATE FUNCTION
Time: 1.073 ms

postgres=# select count(*) from nums where gt3(num, 3450, 0);
 count
--------
 996550
(1 row)

Time: 2356.576 ms

postgres=# explain select count(*) from nums where gt3(num, 3450, 0);
                             QUERY PLAN
--------------------------------------------------------------------
 Aggregate  (cost=265258.34..265258.35 rows=1 width=0)
   ->  Seq Scan on nums  (cost=0.00..264425.00 rows=333333 width=0)
         Filter: gt3(num, 3450, 0)
(3 rows)


--
Amit Langote


pgsql-general by date:

Previous
From: Chris Angelico
Date:
Subject: Re: Migration from DB2 to PostgreSQL
Next
From: Chris Angelico
Date:
Subject: Re: Migration from DB2 to PostgreSQL