Насколько большой массив может быть передан в SQL, где будет column_value IN (Array)? - PullRequest
2 голосов
/ 11 октября 2010

Я пишу некоторый код, который будет искать уникальные идентификаторы в таблице с более чем 60000 строк для тех, которые находятся в массиве, используя

mysql_query("SELECT * FROM users WHERE  unique_indexed_user_id IN('".join("', '", $array)."')") ;

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

   if( count($array_limit)>$array_limit ) 
  array_splice($array, $array_limit);

, но я не знаю, как определить предел, этот код используется в социальной сети для людей, чтобы пригласить своих друзей на что-то.так что чем больше, тем лучше.Однако я не знаю, насколько большой массив MySQL может обрабатывать?

каким должно быть значение $array_limit?

Ответы [ 2 ]

2 голосов
/ 11 октября 2010

Максимальная длина запроса, передаваемого в MySQL, равна длине вашей переменной max_packet_size.http://lists.mysql.com/mysql/187971

Возможно, вы захотите принять во внимание и другие вещи, например время, необходимое для анализа и выполнения запроса с таким количеством идентификаторов.Я сам применил этот подход, и он начал серьезно замедляться после нескольких тысяч удостоверений личности.Вы можете попробовать JOIN, если можете.

0 голосов
/ 11 октября 2010

Сколько вам нужно, правда?

Я использовал что-то вроде 10000 элементов в запросе без проблем (при перемещении данных из одной базы данных в другую, а не на действующий сайт), поэтому вы, безусловно, можете сделать ужасно большой запрос.

Однако нет смысла получать такое количество элементов, когда вы хотите отобразить их пользователю, потому что никто не прокручивает список до конца, и наличие такого большого количества данных, скорее всего, значительно замедлит пользовательский интерфейс.

Вы должны использовать какой-то вид пейджинга или дополнения по запросу, чтобы каждый раз получалось только около ста элементов.

...