Re: slow IN() clause for many cases

From: "Ilia Kantor" <ilia(at)obnovlenie(dot)ru>
To: <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: slow IN() clause for many cases
Date: 2005-10-11 10:23:02
Message-ID: auto-000577353460@umail.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


When in clause becomes large enough (>20-30 cases),
It is much better to use "join" way of processing..

I mean,
"SELECT * FROM table WHERE field IN (1,2...30)" will be slower than
"SELECT * FROM table JOIN (SRF returning 1...30) USING(field)"

I'm not quite sure, where the difference starts, but sometimes I need to
make selects with 30 or more items by primary key and I get significant
speed up by this transform:

CREATE OR REPLACE FUNCTION array2table(arr int[]) RETURNS SETOF int

select * from persons join (select array2table as id from
array2table(array[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,2
3,24,25,26,27,28,29,30])) a using(id);

I'm sure that backend could do that in a much faster and elegant fasion.
Bitmap-or is nice, but for many IN arguments it is still much slower than
join.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Ilia Kantor 2005-10-11 10:25:44 Re: Need A Suggestion
Previous Message Hannu Krosing 2005-10-11 10:14:26 Re: Need A Suggestion