MySQL – SQL_BIG_SELECTS

Эй, я изучал SQL_BIG_SELECTS, но документация MySQL до сих пор была довольно бесполезной. Я ищу некоторое представление о предотвращении появления ошибок, подобных приведенной ниже.

ОШИБКА 1104: SELECT рассмотрит слишком много записей и, вероятно, займет очень много времени. Проверьте свой WHERE и используйте SET OPTION SQL_BIG_SELECTS = 1, если SELECT в порядке

  1. На сколько строк MySQL решает, что запрос является «БОЛЬШИМ ВЫБОРОМ»?
  2. Правильная индексация обычно решает эту проблему?
  3. Является ли SQL_BIG_SELECTS «последним средством», или это хорошая практика?
  4. Как бы кто-то установил «SQL_BIG_SELECTS = 1» в конфигурации (без выполнения запроса)?
  5. Есть ли другие альтернативы, которые стоит знать?

Заранее спасибо!

  1. MySQL определяет, является ли запрос «большим выбором» на основе значения «max_join_size». Если запрос, вероятно, придется исследовать больше, чем это количество строк, он будет считать его «большим выбором». Используйте «show variables» для просмотра значения максимального размера соединения.

  2. Я считаю, что индексирование и особенно хорошее предложение where предотвратит эту проблему.

  3. SQL_BIG_SELECTS используется для предотвращения случайного выполнения чрезмерно больших запросов. Это нормально установить в ON в mysql.cnf или использовать параметр командной строки при запуске.

  4. Вы можете установить SQL_BIG_SELECTS в my.cnf или при запуске сервера. Его также можно установить на основе сеанса с помощью SET SESSION SQL_BIG_SELECTS=1 .

  5. Не то, чтобы я мог думать. Я бы просто проверил ваш запрос, чтобы убедиться, что вам действительно нужно его использовать. На наших серверах он включен по умолчанию, а max_join_size очень большой.

Вы не можете установить SQL_BIG_SELECTS в my.cnf или при запуске сервера, поскольку это параметр только для сеанса. Я использую MySQL 5.0.60.

Поскольку у кого-то есть сообщение раньше, вы не можете установить SQL_BIG_SELECTS на my.cnf при запуске сервера. Эта переменная не поддерживает это.

У меня была такая же проблема с приложением Symfony, показывающим эту досадную ошибку:

 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 

Но вы можете увеличить число varialbe

max_join_size, связанный с sql_big_selects

Я смог исправить это, выполнив команду как привилегированный пользователь mysql:

 # SET GLOBAL max_join_size=18446744073709551615; 

Или вы можете включить его в my.cnf, потому что max_join_size разрешено настраивать в файле конфигурации

Надеюсь, это поможет кому-то другому.

Следующая команда работает для меня

 SET GLOBAL max_join_size=18446744073709551615; 

Но что мне нужно вставить в файл my.cnf вместо команды? Btw, я использую «5.6.12 MySQL Community Server»

У меня было более 2000 тысяч записей в db, и мой запрос был большим – выберите с исчерпывающим сравнением для удаления дубликатов и обновления определенного поля … Мне сказали то же самое mysql (текущая версия в дате ответа), и я закончил использование index на 2 поля, участвующих в том, where предложение … это тоже должно помочь другим … шаги, которые работали на меня:

  1. Установить индекс в поле
  2. ТАБЛИЦА АНАЛИЗА
  3. выполнить запрос

НТН

 SET SESSION SQL_BIG_SELECTS =1;# MySQL returned an empty result set (ie zero rows). SELECT a.`HACtrl` , b.`HBCtrl` , c.`HDCtrl` FROM `HO110BLote` AS a LEFT JOIN `HO113BPago` AS b ON ( b.HBHACtrl = a.HACtrl ) LEFT JOIN `HO113BRecibos` AS c ON ( c.HDHBCtrl = b.HBCtrl ) WHERE HAManzana = '03' AND HALote = '09' LIMIT 0 , 100 
Interesting Posts
Давайте будем гением компьютера.