今天BackOffice系统突然出现了一个以前没有的毛病,数据访问层提示错误信息:
{MySql.Data.MySqlClient.MySqlException: 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
在 MySql.Data.MySqlClient.PacketReader.CheckForError()
......
......
......
网上找了半天也没找到相关的解决办法。后来,自己琢磨,SQL语句前面加上SET SQL_MAX_JOIN_SIZE=10;没管用。又分别再在前边加上SET SQL_BIG_SELECTS=1、SET SQL_BIG_SELECTS=10、SET SQL_MAX_JOIN_SIZE=#等待 ,都不成。以为方向不对,放弃了。
中午吃饭回来,又试了下SQL_MAX_JOIN_SIZE=100000,还不行。突然,发现错误信息里SET SQL_BIG_SELECTS=1 和SET SQL_MAX_JOIN_SIZE=# 之间用的是“or”连接的,就试了下只设置SET SQL_BIG_SELECTS=1,居然过了!
我的系统是C#+mysql,SQL语句里用了7个left join,SElect 出来后也只有96行,以前运行也一直没问题。虽然问题解决了可还是不明白为什么突然出现的这个毛病。有哪位知道根本原因的请给说下。
--转自