SQL: цикл одиночного выбора против одного выбора с предложением IN - PullRequest
0 голосов
/ 15 мая 2018

Я хотел бы спросить вас, что быстрее, если использовать

  1. Массив петли и выбор вызова XXX, где id =

  2. Выбор вызоваXXX где id IN (список значений массива)

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Выполнение всей работы в базе данных всегда должно быть быстрее. Каждый раз, когда вы подключаетесь к базе данных, у вас возникают некоторые накладные расходы. Эти издержки могут быть относительно незначительными, если план запроса кэшируется и кэш оптимизируется, но данные по-прежнему необходимо перемещать назад и вперед.

Что еще более важно, движки баз данных оптимизированы для выполнения запросов. Некоторые базы данных оптимизируют выражения in, используя двоичный поиск. Параллельные базы данных могут также использовать несколько процессоров для запроса. Производительность ухудшается только в том случае, если from является представлением или если ваш запрос более сложный.

При некоторых условиях разница в производительности может быть незначительной, например, для локальной базы данных, где таблица кэшируется в памяти. Однако ваша привычка должна заключаться в том, чтобы выполнять такую ​​работу в базе данных, а не в приложении.

0 голосов
/ 15 мая 2018

Второй почти всегда быстрее.Помните, что в первом варианте клиент (обычно) должен выполнить полное соединение с базой данных, войти в систему, отправить запрос, дождаться его анализа, дождаться его оптимизации, дождаться его выполнения изатем дождитесь результата, чтобы вернуться.Во втором варианте все эти шаги выполняются один раз.

Могут быть случаи, когда первый вариант на самом деле быстрее , если ваша индексная схема неверна и не может быть исправлена ​​илисервер серьезно ошибочен в отношении того, как выполнить дизъюнкцию, которая является IN -клаузой и не может быть сказано иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...