Ограничение условий MySQL IN


87

Эй, мне нужно использовать условие IN в моем операторе MySQL с большим набором идентификаторов.

пример

SELECT * FROM users WHERE id IN (1,2,3,4...100000)

Есть ли предел, если элементы, которые может иметь оператор IN?


Ответы:


107

Нет, обратитесь к инструкции о функции IN :

Количество значений в INсписке ограничено только значением max_allowed_packet .


так что если у меня есть, например, обновление с where id IN (14000 ids), оно будет работать, пока запрос на обновление не станет меньше 64 МБ (что является значением по умолчанию), верно?
Олег Абражаев

1
@OlegAbrazhaev INКлючевое слово не имеет встроенных ограничений, однако могут быть и другие ограничения, например, max_allowed_packetкоторые могут косвенно ограничивать количество значений. Если вы установите это значение на 1024 (байта), вы можете эффективно использовать только ограниченное количество значений.
Progman

21

Насколько я знаю, в mysql нет ограничений на элементы в INзаявлении.

Хотя в Oracle существует ограничение в 1000 элементов в INзаявлении.

Но чем больше элементов IN, тем ниже производительность вашего запроса, если этот столбец не проиндексирован.


4
зависит, если IN является первичным ключом поиска, это быстро, потому что это возврат из индекса
ajreal

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.