Предложение MySQL IN: максимальное количество аргументов

Скажем, у вас есть следующий запрос:

SELECT * FROM table1 WHERE table1.id IN (1, 2, 3, 4, 5, ..., 999999)

Каков разумный максимум для количества элементов в предложении IN? Я использую Sphinx для генерации результатов полнотекстового поиска и вставки идентификаторов в запрос MySQL. Это приемлемый способ сделать это?

Ответ 1

Вы также можете иметь предложение IN взять результаты запроса, например:

SELECT * FROM table1 
WHERE table1.id IN 
    (
   SELECT id from table2
    )

Таким образом, вам не нужно генерировать текстовую строку со всеми возможными значениями.

В mysql вы должны иметь возможность поместить столько значений в предложение IN, сколько хотите, только с ограничением на значение "max_allowed_packet".

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_allowed_packet

Ответ 2

Из моего опыта максимальные значения составляют 1000 значений в пункте IN ('1',....,'1000'), У меня есть 1300 значений в моем листе Excel, я положил их все в IN, MySQL возвращает только 1000.