MySQL: «SELECT будет проверять больше, чем строки MAX_JOIN_SIZE» - PullRequest
12 голосов
/ 03 июня 2009

Я использую PHP и MySQL. В моей программе есть запрос на выборку, включающий объединения. Когда я запускаю его на локальном хосте, он работает нормально, но когда я загружаю его на свой сервер и пытаюсь выполнить его, он генерирует следующую ошибку:

The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

Как я могу это исправить?

Ответы [ 6 ]

21 голосов
/ 17 октября 2012

При использовании PHP SQL_BIG_SELECTS = 1 должно быть установлено в отдельном запросе перед вашим основным запросом. Например:

<code>$mysqli = new mysqli("localhost", "root", "password", "db"); 

$mysqli->query("SET SQL_BIG_SELECTS=1");  //Set it before your main query

$results = $mysqli->query("SELECT a, b, c FROM test");
while($row = $results->fetch_assoc()){
    echo '<pre>';
    print_r ($row);
    echo '
'; }
11 голосов
/ 03 июня 2009

Попробуйте выполнить как запрос, предшествующий выполнению выбора:

SET SQL_BIG_SELECTS=1

Это действительно выполняется для огромного набора данных? Если нет, то это должно быть решено по-другому.

3 голосов
/ 03 июня 2009

Эффект параметра задокументирован на http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_join_size.

Вам следует более тщательно фильтровать соответствующие записи (чтобы в каждой части запроса было меньше записей). Если возможно, начните с таблицы, где вы можете отфильтровать большинство записей с помощью простого предложения WHERE.

0 голосов
/ 22 октября 2017

Если вы используете драйвер PDO, задайте PDO::MYSQL_ATTR_INIT_COMMAND в вашем массиве driver_options при создании дескриптора новой базы данных

вроде так:

$dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION SQL_BIG_SELECTS=1'));
0 голосов
/ 13 января 2016

Для меня решение состояло в том, чтобы добавить ключ индекса ко всем столбцам, для которых использовались объединения.

0 голосов
/ 13 января 2012

Я столкнулся с той же проблемой. Это друпский сайт, поэтому неудивительно, что он упал.

Это был запрос старого стиля, то есть Select blah From table1, table2, table3 Where table1.id=table2.id And table2.some = 'thing'

Как говорит @VolkerK, решение состояло в том, чтобы переместить предложения where, отфильтровавшие результаты table2, до того, которое сопоставило table1 с table2 (фактически, предложения объединения), таким образом уменьшив количество записей, которые должны совпадать в table2, к table1.

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