嘿,我一直在调查SQL_BIG_SELECTS,但到目前为止MySQL文档一直没有用。我正在寻找一些见解,以防止出现如下所示的错误。
错误1104:SELECT会检查太多记录,可能需要很长时间。 如果SELECT正常,请检查您的WHERE并使用SET OPTION SQL_BIG_SELECTS = 1
提前致谢!
答案 0 :(得分:39)
MySQL根据“max_join_size”的值确定查询是否为“大选择”。如果查询可能必须检查超过此行数,则会将其视为“大选择”。使用'show variables'查看最大连接大小的值。
我认为索引和特别好的where子句可以防止出现此问题。
SQL_BIG_SELECTS用于防止用户意外执行过大的查询。可以在mysql.cnf中将其设置为ON或在启动时使用命令行选项。
您可以在my.cnf或服务器启动时设置SQL_BIG_SELECTS。它也可以使用SET SESSION SQL_BIG_SELECTS=1
在会话基础上设置。
不是我能想到的。我会检查您的查询以确保您确实需要使用它。我们的服务器默认打开它,而max_join_size非常大。
答案 1 :(得分:2)
你无法在my.cnf或服务器启动时设置SQL_BIG_SELECTS
,因为它只是一个会话参数。我使用的是MySQL 5.0.60。
答案 2 :(得分:1)
如前所述有人发帖,您无法在服务器启动时在my.cnf上设置SQL_BIG_SELECTS。这种变量不支持。
我在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
但你可以增加变种的数量
max_join_size与sql_big_selects相关
我能够修复它作为特权mysql用户执行命令:
# SET GLOBAL max_join_size=18446744073709551615;
或者您可以将其包含在my.cnf中,因为允许在配置文件中设置max_join_size
嗯,我希望这可以帮助别人。
答案 3 :(得分:0)
以下命令适用于我
SET GLOBAL max_join_size=18446744073709551615;
但是我需要在my.cnf文件中添加什么而不是命令? 顺便说一下,我正在使用“5.6.12 MySQL社区服务器”
答案 4 :(得分:0)
我在db中有超过2000k的记录,我的查询是大选择,详细比较删除重复和某些字段的更新...我被mysql
告知了同样的事情(当前版本在答案日期) ),我最终在index
条款涉及的2个字段上使用where
...这也应该对其他人有所帮助......对我有用的步骤是:
HTH
答案 5 :(得分:-1)
SET SESSION SQL_BIG_SELECTS =1;# MySQL returned an empty result set (i.e. 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