powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Select ... where ... in () - как перехитрить парсер?
4 сообщений из 4, страница 1 из 1
Select ... where ... in () - как перехитрить парсер?
    #39983765
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
Нужно делать выборку по заданному извне списку идентификаторов.
Эксперименты показывают, что с литералами в in все работает гораздо быстрее по сравнению с закачкой списка во временную таблицу.
Но смущает, что "одноразовые" запросы будут засирать кэш.
Нет ли в Postgres какого-то магического хинта для непомещения запроса в кэш? Поиск не помог.
...
Рейтинг: 0 / 0
Select ... where ... in () - как перехитрить парсер?
    #39983769
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис

Но смущает, что "одноразовые" запросы будут засирать кэш.

Это не так. Кеш запросов в постгресе возможен только в рамках сессии и только если запросы туда явно поместить ( prepare ).
...
Рейтинг: 0 / 0
Select ... where ... in () - как перехитрить парсер?
    #39983770
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. IMHO
Как-то динамически генерируемы список литералов в in в любом случае выглядит гуано-кодом
Нагрузка на парсер, не возможность сделать PreparedStatement и так далее

2. Вроде, оператор ANY позволяет указывает внутри себя не subquery, а и просто Array. Возможно с IN это так же может получится. Т.ч. вместо списка литералов, наверное можно использовать:
SELECT..... WHERE field = ANY( ? )
где ? просто array который биндится с клиента

Ну или через unnest

Точно не знаю, не проверял, но лично я бы попытался в эту сторону покопать

https://www.postgresqltutorial.com/postgresql-array/
...
Рейтинг: 0 / 0
Select ... where ... in () - как перехитрить парсер?
    #39983778
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Приветствую!
Нужно делать выборку по заданному извне списку идентификаторов.
Эксперименты показывают, что с литералами в in все работает гораздо быстрее по сравнению с закачкой списка во временную таблицу.
Но смущает, что "одноразовые" запросы будут засирать кэш.
Нет ли в Postgres какого-то магического хинта для непомещения запроса в кэш? Поиск не помог.


я бы начал с показа планов запросов с
"Эксперименты показывают, что с литералами в in все работает гораздо быстрее по сравнению с закачкой списка во временную таблицу."
причем с explain (analyze, costs, buffers, timing)

два - никакого кеша запросов в базе нет.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Select ... where ... in () - как перехитрить парсер?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]