Обсуждение: How come index isn't being used when query by function return value?

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

How come index isn't being used when query by function return value?

От
Joseph Shraibman
Дата:
db:db=>explain select * from elog where id = eds('2006-01-01');
                                         QUERY PLAN
-------------------------------------------------------------------------------------------
  Seq Scan on elog  (cost=0.00..1894975.10 rows=1 width=204)
    Filter: (id = eds('2006-01-01 00:00:00'::timestamp without time zone))
(2 rows)

db:db=>explain select * from elog, (select eds('2006-01-01') as trg) aa
where id = trg;
                                       QUERY PLAN
--------------------------------------------------------------------------------------
  Nested Loop  (cost=0.00..4.36 rows=1 width=208)
    ->  Subquery Scan aa  (cost=0.00..0.02 rows=1 width=4)
          ->  Result  (cost=0.00..0.01 rows=1 width=0)
    ->  Index Scan using elog_pkey on elog  (cost=0.00..4.33 rows=1
width=204)
          Index Cond: (elog.id = "outer".trg)
(5 rows)

Time: 0.978 ms
db:db=>select version();
                                                  version
----------------------------------------------------------------------------------------------------------
  PostgreSQL 8.0.8 on x86_64-unknown-linux-gnu, compiled by GCC gcc
(GCC) 3.4.4 20050721 (Red Hat 3.4.4-2)
(1 row)


Re: How come index isn't being used when query by function return value?

От
"Merlin Moncure"
Дата:
On 7/13/06, Joseph Shraibman <jks@selectacast.net> wrote:
> db:db=>explain select * from elog where id = eds('2006-01-01');
>                                          QUERY PLAN
> -------------------------------------------------------------------------------------------
>   Seq Scan on elog  (cost=0.00..1894975.10 rows=1 width=204)
>     Filter: (id = eds('2006-01-01 00:00:00'::timestamp without time zone))
> (2 rows)

is eds immutable function?

Merlin

Re: How come index isn't being used when query by function return

От
Joseph Shraibman
Дата:
It is STABLE, which I finally figured out.  I had to find section 31.6
of the docs, which is nowhere near the part about writing functions.

Merlin Moncure wrote:
> On 7/13/06, Joseph Shraibman <jks@selectacast.net> wrote:
>> db:db=>explain select * from elog where id = eds('2006-01-01');
>>                                          QUERY PLAN
>> -------------------------------------------------------------------------------------------
>>
>>   Seq Scan on elog  (cost=0.00..1894975.10 rows=1 width=204)
>>     Filter: (id = eds('2006-01-01 00:00:00'::timestamp without time
>> zone))
>> (2 rows)
>
> is eds immutable function?
>
> Merlin
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: explain analyze is your friend
>