MySQL – SQL_BIG_SELECTS
嘿,我一直在调查SQL_BIG_SELECTS,但到目前为止MySQL文档已经相当无益。 我正在寻找一些见解,以防止像下面的错误出现。
错误1104:SELECT会检查太多logging,可能需要很长时间。 检查你的WHERE并使用SET OPTION SQL_BIG_SELECTS = 1如果SELECT是好的
- MySQL有多less行决定查询是一个“BIG SELECT”?
- 适当的索引通常会解决这个问题吗?
- SQL_BIG_SELECTS是否被认为是“最后的手段”,还是很好的做法?
- 如何在configuration中设置“SQL_BIG_SELECTS = 1”(不必执行查询)?
- 有其他的select值得了解吗?
提前致谢!
-
MySQL根据“max_join_size”的值确定查询是否为“大选”。 如果查询可能需要检查超过这个数量的行,它会认为它是一个“大选”。 使用“显示variables”查看最大连接大小的值。
-
我相信,索引和特定的一个好的where子句可以防止这个问题的发生。
-
SQL_BIG_SELECTS用于防止用户意外执行过大的查询。 可以在mysql.cnf中将其设置为ON,也可以在启动时使用命令行选项。
-
您可以在my.cnf或服务器启动时设置SQL_BIG_SELECTS。 也可以使用
SET SESSION SQL_BIG_SELECTS=1
在会话基础上进行SET SESSION SQL_BIG_SELECTS=1
。 -
不是我能想到的。 我只是检查你的查询,以确保你真的需要使用它。 我们的服务器默认开启,max_join_size非常大。
您不能在my.cnf或服务器启动时设置SQL_BIG_SELECTS
,因为它仅是会话参数。 我正在使用MySQL 5.0.60。
由于以前有人发帖,您不能在服务器启动时在my.cnf上设置SQL_BIG_SELECTS。 这种variables不支持。
我遇到了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的数量
与sql_big_selects有关的max_join_size
我能够修复它作为特权的mysql用户执行命令:
# SET GLOBAL max_join_size=18446744073709551615;
或者你可以在my.cnf中包含它,因为max_join_size是允许在configuration文件中设置的
那么,我希望这可以帮助别人。
以下命令为我工作
SET GLOBAL max_join_size=18446744073709551615;
但是,我需要把my.cnf文件,而不是命令? 顺便说一句,我使用“5.6.12 MySQL社区服务器”
我有超过2000k的logging在数据库中,我的查询是大select与详尽的比较重复删除和某些领域的更新…我被告知同样的mysql
(当前版本的答案date),我结束了使用index
涉及where
子句的2个字段…这也应该可以帮助其他人…为我工作的步骤是:
- 在字段上设置索引
- 分析表
- 运行查询
HTH
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