Какое максимальное количество элементов передается в IN () в MySQL? - PullRequest
3 голосов
/ 20 июня 2011

Мне дали кучу идентификаторов (из внешнего источника), которые мне нужно сопоставить с идентификаторами в нашей базе данных и отфильтровать те, которые попадают между определенной датой, а также «включены» и некоторые другие параметры.Я легко могу сделать это, выполнив:

SELECT * FROM `table` WHERE `id` IN (csv_list_of_external_ids) 
    AND (my other cross-reference parameters);

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

Учитывая, что ничто не может быть кэшировано (поскольку пользовательские данные и внешние идентификаторы меняются в значительной степени при каждом запросе), и что эти запросыслучается, по крайней мере, каждые 10 секунд.Какие еще есть альтернативы SQL?

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Я считаю, что единственным ограничением является длина самого запроса, который контролируется параметром "max_allowed_packet" в вашем файле my.cnf.

0 голосов
/ 20 июня 2011

Если вы выразите это как подзапрос:

SELECT * FROM table
WHERE id IN (SELECT ID FROM SOME_OTHER_TABLE)
AND ...

нет предела.

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