Есть ли ограничение на длину запроса в mysql?

Я задаю этот вопрос, потому что мне нужно знать это ограничение, поскольку я генерирую запрос SELECT в моем PHP-скрипте, и часть WHERE в этом запросе генерируется внутри цикла.
Точно так выглядит

$query="SELECT field_names FROM table_name WHERE "; $condition="metadata like \"%$uol_metadata_arr[0]%\" "; for($i=1; $i<count($uol_metadata_arr); $i++){ $condition.=" OR metadata like \"%$uol_metadata_arr[$i]%\" "; } $query.=$condition; $result=mysql_query($query); 

Итак, вот почему мне нужно знать, как долго может быть строка $ query , потому что массив $ uol_metadata_arr может содержать много элементов.

  1. (если возможно) Используйте WHERE metadata IN ('value1', 'value2')
  2. Возможно, вам нужно увеличить max_allowed_packet . По умолчанию он равен 16 МБ (на стороне клиента и до 1 МБ на стороне сервера в более старых версиях), и не так сложно построить запрос, который соответствует этому пределу (например, импортирование данных из других источников с помощью гигантского запроса INSERT )

LIKE '%string%' – это убийца производительности. Такой запрос не может использовать индекс в этом столбце. LIKE 'string%' с другой стороны, индексируется

См. Глобальную переменную max_allowed_packet . Вам потребуется доступ к файлу my.cnf, чтобы настроить его (и его нужно настроить и на вашем клиенте). Типичными значениями по умолчанию являются либо 1mb, либо 16mb …