Re: Query plans not identical for `id in(1,2,3)` and `(id=1 or id=2 or id=3)`

Поиск
Список
Период
Сортировка
От Ilya Basin
Тема Re: Query plans not identical for `id in(1,2,3)` and `(id=1 or id=2 or id=3)`
Дата
Msg-id 8fa3f3c5-7515-4672-b652-73167a08bbf4@gmail.com
обсуждение исходный текст
Ответ на Re: Query plans not identical for `id in(1,2,3)` and `(id=1 or id=2 or id=3)`  (Thomas Kellerer <shammat@gmx.net>)
Список pgsql-general
Laurenz thanks for the info.

Thomas no I can't.

-------- Original Message --------
From: Thomas Kellerer [mailto:shammat@gmx.net]
Sent: Sunday, March 10, 2024 at 11:58 UTC
To: pgsql-general@lists.postgresql.org
Subject: Query plans not identical for `id in(1,2,3)` and `(id=1 or id=2 or id=3)`

Ilya Basin schrieb am 09.03.2024 um 20:08:
Hi List.

I have a list of bigint keys and I need to retrieve rows by these keys. Normally, I would split this list into pages of
size900 and perform several `SELECT ... WHERE key in($1,$2,...)`. However, the proprietary ORM we use can only produce
thisSQL: `SELECT ... WHERE (key=$1 or key=$2 or ...)`. Surprisingly, PostgreSQL planner treats these two SQLs
differently:

- ```select * FROM "audittrail$referencelogline" where id in ( 1 , 2 , 3 )```

Index Scan
https://i.stack.imgur.com/dr8oz.png

- ```select * FROM "audittrail$referencelogline" where id = 1 or id = 2 or id = 3```

A lot of "Bitmap Index Scan" for each value
https://i.stack.imgur.com/dnErs.png

Is it possible to configure PostgreSQL 12.16 to treat the second query as the first?

Can you convince your obfuscation layer to send an array value (containing all IDs) and change the query to:

    select * FROM "audittrail$referencelogline" where id = any(?)







В списке pgsql-general по дате отправления:

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: Question related to partitioning with pg_partman
Следующее
От: hassan rafi
Дата:
Сообщение: Re: Seeing high query planning time on Azure Postgres Single Server version 11.