Сколько значений в предложении "in" слишком много в SQL-запросе?
У меня есть SQL-запрос, который использует значения массива в своем предложении WHERE:
$ids = array
(
[0] => 1
[1] => 2
[2] => 5
)
$ids = join(',',$ids);
$sql = "SELECT * FROM cats WHERE id IN ($ids)";
Мой вопрос: сколько идентификаторов слишком много?
Будет ли это влиять на скорость?
Спасибо всем
Ответы
Ответ 1
Oracle имеет предел в 1000, который я использовал раньше. MySQL, похоже, не возражает. Лучшее решение - не использовать предложение IN для этого большого набора данных. Откуда появляются Иды? Если из одного и того же БД, то посмотрите, можно ли вместо этого использовать подзапрос, который выполняет поиск по одному параметру, например. userid, чтобы найти связанные идентификаторы. Это будет гораздо более эффективно, так как MySQL может выполнять внутреннее использование с использованием индексов.
Ответ 2
Чем больше данных вы выберете, тем дольше это займет, но в первую очередь вы не должны указывать количество идентификаторов, которые вы выбрали. Вместо этого вы должны убедиться, что ваш идентификатор имеет INDEX
на нем или что это PRIMARY KEY
. Это сделает поиск быстрым, независимо от того, сколько идентификаторов вы захватываете.
Ответ 3
Чем больше значений вы введете в IN
, тем медленнее он будет работать, очевидно.
"сколько их слишком много" является функцией многих факторов. Например, размер вашего набора данных. Или как выглядит остальная часть вашего запроса.
Ответ 4
подумайте... если вам нужно написать 5 страниц или 10, что займет больше времени... это нормально, если у вас есть огромное количество идентификаторов, чтобы сделать запрос длиннее. Вы должны посмотреть и заверить, что ваши данные не повторяются, потому что что сделает запрос более длинным для ненужных данных.