Re: runtime of the same query in function differs on 2 degree!
| От | Gaetano Mendola |
|---|---|
| Тема | Re: runtime of the same query in function differs on 2 degree! |
| Дата | |
| Msg-id | 3F7CBA4E.6020302@bigfoot.com обсуждение исходный текст |
| Ответ на | runtime of the same query in function differs on 2 degree! (Andriy Tkachuk <ant@imt.com.ua>) |
| Ответы |
Re: runtime of the same query in function differs on 2
|
| Список | pgsql-performance |
Andriy Tkachuk wrote:
> Hi folks.
>
> What's wrong with planner that executes my query in function?:
> (i mean no explanation but runtime)
>
>
> tele=# EXPLAIN analyze select calc_total(6916799, 1062363600, 1064955599);
> QUERY PLAN
> ------------------------------------------------------------------------------------------
> Result (cost=0.00..0.01 rows=1 width=0) (actual time=36919.37..36919.37 rows=1 loops=1)
> Total runtime: 36919.40 msec
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> tele=# \df+ calc_total
> ...
> declare
> usr alias for $1;
> d1 alias for $2;
> d2 alias for $3;
> res integer;
> begin
> select sum(cost) into res
> from bills where
> (parent(user_id) = usr or user_id = usr)
> and dat >= d1 and dat < d2;
> if res is not null then
> return res;
> else
> return 0;
> end if;
> end;
You didn't wrote the type of d1 and d2, I had your same problem:
declare
a_user alias for $1;
res INTEGER;
begin
select cost into res
from my_table
where login = a_user;
......
end;
the problem was that login was a VARCHAR and a_user was a TEXT so
the index was not used, was enough cast a_user::varchar;
I believe that your dat, d1, d2 are not "index" comparable.
Gaetano
В списке pgsql-performance по дате отправления: