Обсуждение: function performs differently with different values

Поиск
Список
Период
Сортировка

function performs differently with different values

От
Ben Chobot
Дата:
I've got a sql language function which does a fairly simple select from a table. If I give it one value, it performs
quickly(half a ms). If I give it another value, it does not (1.1 seconds). When I run the equivalent select outside of
thefunction, both values perform roughly the same (even though one value returns 140k more rows, as expected).  

My understanding is that this generally happens because the plan should be different for the different values, but the
firsttime the function is run it caches the plan for one of the values and will never use the appropriate plan for the
secondvalue. However, when I do an explain analyze of the raw sql for both values, I get the same plan. So my
understandingmust be wrong? 

I suppose the other possibility is that the slower value is slower in a function because it's returning 140k more rows
andthe function has to deal with that additional data..... but that seems far-fetched, given that each row is just an
int.

Re: function performs differently with different values

От
Robert Haas
Дата:
On Sat, Apr 10, 2010 at 4:47 PM, Ben Chobot <bench@silentmedia.com> wrote:
> My understanding is that this generally happens because the plan should be different for the different values, but
thefirst time the function is run it caches the plan for one of the values and will never use the appropriate plan for
thesecond value. 

No, it plans based on a sort of "generic value", not the first one you
supply.  The way to get at that plan is:

PREPARE foo AS <query>;
EXPLAIN EXECUTE foo (parameters);

...Robert