172 похожих чатов

Привет всем, есть немного глупый теоретический вопрос На вход на бэкенд

(вне базы) прилетает сет айдишников которые надо проверить на наличие в базе

Я могу сделать это одним запросом, который будет делать что-то вроде select * from UNNEST(ARRAY[*прилетевшие ко мне идентификаторы*]) потом заджоиниться на нужную таблицу левым джоином и выдать результат, так я успешно получу какие айдишники из присланного сета в таблице есть, а каких нет

Но исходный сет айдишников может быть "условно" большим (допустим 10к записей) и вместо одного запроса в базу данных можно послать несколько параллельных запросов

Я бы, конечно, послал один большой, но может ли несколько параллельных запросов быть быстрее в таком случае? Извиняюсь за то что очень пространно спрашиваю

8 ответов

5 просмотров

10к это не много

Egor-Gusarenko Автор вопроса
Alexey Bulgakov
10к это не много

Да, поэтому и вопрос скорее теоретический, в плане много ли это в рамках сгенерированого запроса, т е это банально прорва текста

"SELECT id FROM table WHERE id IN (" . join(", ", map { $dbh->quote($_) } @ids) . ")" Пока количество id меньше 10К это будет быстрее чем джойнить. Так народ занимается микрооптимизациями.

а сам планировщик не догадается распаралелить?

Egor Gusarenko
Да, поэтому и вопрос скорее теоретический, в плане...

сделайте стресс тест, что бы определить границы коллекции и дальше limit

Egor-Gusarenko Автор вопроса
central hardware
а сам планировщик не догадается распаралелить?

Конечно догадается, но тут глупый вопрос будет ли сильно хуже вариант с несколькими параллельными запросами

Egor-Gusarenko Автор вопроса
Warstone
"SELECT id FROM table WHERE id IN (" . join(", ", ...

Выглядит круто, спасибо!

Стратегии тут по существу две: либо использовать индекс, либо нет (делать последовательный поиск и проверять ID-шник на присутствие в заданном множестве). JOIN с использованием nested loop - это разновидность первой стратегии. А вот HASH JOIN - второй. IN clause может как использовать index merge, так и последовательный поиск. Что выгоднее зависит от размеров таблички и множества ID-шиков. А также размера записи (соотношение размера таблички и индекса). Последовательный поиск постгрес ещё умеет параллелить...

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
11
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
А если для werf организовать отдельный репозиторий, а сервисы из проекта подключить как симлинки? И симлинки в гитигнор добавить?
Dmitriy Andreev
13
это группа токсиков или тех кто помогает?
Ибрагим
9
Всем здравствуйте!) У меня такой вопрос. Есть два роута, роут1 и роут2. Они связаны с очередью some_queue. По задаче предполагается, что есть два паблиша. Паблиш1 отправляет...
Format
10
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
8
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
У кого-нибудь есть под рукой функция кодирования юникода, которая из фразы На русском сделает \u041d\u0430\u0020\u0440\u0443\u0441\u0441\u043a\u043e\u043c ?
Daniil Smolyakov
7
Карта сайта