Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
24.07.2020, 17:56
|
|||
---|---|---|---|
|
|||
Select ... where ... in () - как перехитрить парсер? |
|||
#18+
Приветствую! Нужно делать выборку по заданному извне списку идентификаторов. Эксперименты показывают, что с литералами в in все работает гораздо быстрее по сравнению с закачкой списка во временную таблицу. Но смущает, что "одноразовые" запросы будут засирать кэш. Нет ли в Postgres какого-то магического хинта для непомещения запроса в кэш? Поиск не помог. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.07.2020, 18:07
|
|||
---|---|---|---|
|
|||
Select ... where ... in () - как перехитрить парсер? |
|||
#18+
Соколинский Борис Но смущает, что "одноразовые" запросы будут засирать кэш. Это не так. Кеш запросов в постгресе возможен только в рамках сессии и только если запросы туда явно поместить ( prepare ). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.07.2020, 18:17
|
|||
---|---|---|---|
|
|||
Select ... where ... in () - как перехитрить парсер? |
|||
#18+
1. IMHO Как-то динамически генерируемы список литералов в in в любом случае выглядит гуано-кодом Нагрузка на парсер, не возможность сделать PreparedStatement и так далее 2. Вроде, оператор ANY позволяет указывает внутри себя не subquery, а и просто Array. Возможно с IN это так же может получится. Т.ч. вместо списка литералов, наверное можно использовать: SELECT..... WHERE field = ANY( ? ) где ? просто array который биндится с клиента Ну или через unnest Точно не знаю, не проверял, но лично я бы попытался в эту сторону покопать https://www.postgresqltutorial.com/postgresql-array/ ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.07.2020, 18:49
|
|||
---|---|---|---|
|
|||
Select ... where ... in () - как перехитрить парсер? |
|||
#18+
Соколинский Борис Приветствую! Нужно делать выборку по заданному извне списку идентификаторов. Эксперименты показывают, что с литералами в in все работает гораздо быстрее по сравнению с закачкой списка во временную таблицу. Но смущает, что "одноразовые" запросы будут засирать кэш. Нет ли в Postgres какого-то магического хинта для непомещения запроса в кэш? Поиск не помог. я бы начал с показа планов запросов с "Эксперименты показывают, что с литералами в in все работает гораздо быстрее по сравнению с закачкой списка во временную таблицу." причем с explain (analyze, costs, buffers, timing) два - никакого кеша запросов в базе нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1994562]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 188ms |
0 / 0 |