From: | "Olivier Hubaut" <olivier(at)scmbb(dot)ulb(dot)ac(dot)be> |
---|---|
To: | "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Is it normal that functions are so much faster than inline queries |
Date: | 2004-04-01 07:07:52 |
Message-ID: | opr5rp7eg094ope3@olivier.amaze.ulb.ac.be |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On Wed, 31 Mar 2004 10:33:20 -0500, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> "Olivier Hubaut" <olivier(at)scmbb(dot)ulb(dot)ac(dot)be> writes:
>> When I want to execute this set of queries in a function:
>> ...
>> It takes only 2 seconds.
>
>> But when I tried to do it directly in the psql term (replacing the $1
>> value with the same used in the function call), I'm obliged to kill the
>> second query after 10 minutes because it's still runnning!
>
> You're presumably getting different plans in the two cases. Usually
> we hear complaints about the function case being slower, because the
> planner has less information when it has to work with a parameter
> instead of a constant. In this case it seems the stupider plan is being
> chosen with a constant :-(. You have not shown enough information to
> tell why, but I'm wondering about datatype mismatch preventing an index
> from being used. What is the declared datatype of the $1 parameter, and
> does it match what will be assumed for the unadorned constant?
>
> regards, tom lane
>
Thank you for your response
I'll try to give enough information this time
- the columns 'batch' used in the join is a char(50) in the two table
- the columns 'id' and 'new_value' also used in the join are both char(64)
- the argument passed to the function is a string
The first table (oly.amaze_log_database_object) have more or less 40,000
rows that are corresponding to the first part of the 'where' clause
(batch=$1) on a total amount of 41,000
The second one (oly.amaze_log_object) have more or less 20,000 rows on a
total amount of 21,000 that should match with the join condition.
They are no index and I tried to put some on the couples (batch, id) and
(batch, new_value) and/or the (batch) columns, without more success.
Hope that's enough.
For the moment, we planned to upgrade to Pg 7.4, hoping this will resolve
the problem...
Regards,
Olivier Hubaut
--
Downloading signature ... 99%
*CRC FAILED*
signature aborted
From | Date | Subject | |
---|---|---|---|
Next Message | malia, sean | 2004-04-01 15:27:32 | Re: DB question - Merging data from one table to another. |
Previous Message | Josh Berkus | 2004-03-31 23:49:29 | Re: left join on a view takes significantly more time. |