Есть ли ограничение на длину запроса в MySQL? - PullRequest
8 голосов
/ 12 июня 2010

Я задаю этот вопрос, потому что мне нужно знать это ограничение, так как я генерирую запрос 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 может содержать много предметов.

Ответы [ 2 ]

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

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

5 голосов
/ 12 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...