Re: How bad is using queries with thousands of values for operators IN or ANY?

From: Thomas Kellerer <shammat(at)gmx(dot)net>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: How bad is using queries with thousands of values for operators IN or ANY?
Date: 2020-08-31 11:29:02
Message-ID: 699b4b9a-e67f-4823-dcc6-1be2a61ef217@gmx.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thorsten Schöning schrieb am 31.08.2020 um 12:37:
> So for what query size or number of IDs to compare in IN would you
> consider a different approach at all?

In my experience "hundreds" of IDs tend to be quite slow if used with an IN clause.

Rewriting the IN to a JOIN against a VALUES clause is very often faster:

So instead of:

select *
from t
where id in (1,2,3, .... ,500);

using this:

select *
from t
join (
values (1),(2),(3),...(500)
) as x(id) on x.id = t.id

produces more often than not a more efficient execution plan (assuming no values are duplicated in the IN list)

Obviously I don't know if such a re-write is even feasible though.

Thomas

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2020-08-31 13:37:12 Re: Query performance with min and filter
Previous Message Dirk Krautschick 2020-08-31 11:06:01 High Availability, guarantee to use sync nodes