Main > Databases | MySQL > MySQL ошибка: The SELECT would examine more than MAX_JOIN_SIZE rows..

MySQL ошибка: The SELECT would examine more than MAX_JOIN_SIZE rows..

08.09.2018 0 comments » Views: 3,015

mysql

При попытке сделать дамп базы mysql с помощью утилиты mysqldump столкнулся с ошибкой:

mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM table': The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay (1104)

В этой заметке расскажу что это значит и как это исправить..

В чем заключается проблема?

Эта ошибка возникает, когда наложены ограничения на кол-во выбираемых данных (в случае обычной выборки это кол-во строк, в случае JOIN-ов это кол-во комбинаций строк). Такие ограничения делают при конфигурации MySQL для того, чтобы программисты, по невнимательности, не писали огромные выборки, тем самым убивая производительность базы данных. Разумеется иногда нужно выбрать 1.000.000 или больше записей, но в 99% случаев, это не нужно и такая выборка - результат неверно построенного запроса.

Как посмотреть текущие ограничения?

Получить текущее значение max_join_size можно при помощи такого SQL запроса

В случае если администратор менял настройки по-умолчанию, то выведет цифру ограничения, что-то вроде 1.000.000.

Значение, по-умолчанию (DEFAULT) для этой опции: 18.446.744.073.709.551.615

Как поменять текущие ограничения?

Если нужно сделать это временно, то можно попробовать вот так

Либо, найти эту опцию в конфиге my.cnf и заменить значение

если поменяли в конфиге, не забудьте перезапустить сервер

Обратите внимание, что после установки max_join_size отличным от DEFAULT, значение sql_big_selects (другой опции) будет установлено равной "0". Если после этого, вы установите sql_big_selects = 1, то значение max_join_size будет проигнорировано.

Можно ли изменить значение max_join_size только для mysqldump?

В моем случае, я увеличил значение max_join_size  до 10.000.000 в общем конфиге (имеется ввиду my.cnf), т.к. мне нужна была большая выборка с join-ами в самом проекте.

Как просто изменить max_join_size в общей конфигурации только для mysqldump, я не нашел.

Предполагаю, что можно попробовать запускать mysqldump с отдельным конфигом, вот такими опциями:

Если Вы знаете другое решение (наподобие "--init-command" для mysql), напишите о нем в комментариях.

Author: | Rating: 4/5 | Tags: , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>