Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Нагрузка на сервер при запросе типа IN()

#sql #mysql


Такой вопрос: если я делаю sql запрос типа WHERE id IN(12,3,54,5,6,8,234) и так далее,
не станет ли это причиной, например, падения сервера, если количество этих самых IN
возрастет до, например, 10000 идентификаторов?    


Ответы

Ответ 1



Ну подумайте, 10к идентификаторов. Бегло - это 45к-50к символов. Только распарсить такой запрос - уже проблема. Упасть может и не упадет, но нагрузит капитально. В любом случае - так лучше не делать.

Ответ 2



MS Sql Server бросает исключение, если у запроса более 2100 параметров. У MySql тоже могут быть подобные ограничения. Если мне нужно сделать выборку, у которой в IN больше, чем 2100 значений, я группирую набор значений и делаю несколько запросов.

Ответ 3



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

Комментариев нет:

Отправить комментарий