Re: [HACKERS] subselect and optimizer - Mailing list pgsql-hackers

From Vadim B. Mikheev
Subject Re: [HACKERS] subselect and optimizer
Date
Msg-id 353D878B.BD3F3A02@sable.krasnoyarsk.su
Whole thread Raw
In response to subselect and optimizer  ("Igor Sysoev" <igor@nitek.ru>)
List pgsql-hackers
Igor Sysoev wrote:
>
> I'm using PostgreSQL 6.3.2.
>
> As reported in some messages ago PostgreSQL has problem with
> "... where some_field in (select ..." type subqueries.
> One of the solutions was to create indecies.
> I created two indecies for character(9) fields key and newkey:
> create index key_i on bik (key);
> create index newkey_i on bik (newkey);
> run two quiery explain:
>
> bik=> explain select * from bik where key in (select newkey from bik where
> bik='044531864');
> NOTICE:  Apr 21 14:15:41:QUERY PLAN:
>
> Seq Scan on bik  (cost=770.92 size=1373 width=113)
>   SubPlan
>     ->  Seq Scan on bik  (cost=770.92 size=1 width=12)
          ^^^
This is very strange. Index Scan should be used here.
I'll try to discover this...

BTW, IN is slow (currently :) - try to create 2-key index on bik (bik, newkey)
and rewrite your query as

select * from bik b1 where EXISTS (select newkey from bik where
bik = '....' and b1.key = newkey)

And let's know... (Note, that index on (newkey, bik) may be more useful
than on (bik, newkey) - it depends on your data).

Vadim

pgsql-hackers by date:

Previous
From: "Vadim B. Mikheev"
Date:
Subject: Re: [QUESTIONS] How to use memory instead of hd?
Next
From: "Igor Sysoev"
Date:
Subject: Re: [HACKERS] subselect and optimizer