場景:
線上執行了一條大查詢的SQL,出現報錯:
ERROR 1104 (42000): 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
排查:
查看SQL_BIG_SELECTS和MAX_JOIN_SIZE
mysql> show variables like 'max_join_size';
+---------------+----------------------+
| Variable_name | Value |
+---------------+----------------------+
| max_join_size | 6000000 |
+---------------+----------------------+
1 row in set (0.02 sec)
mysql> show variables like 'SQL_BIG_SELECTS';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| sql_big_selects | OFF |
+-----------------+-------+
1 row in set (0.00 sec)
發現MAX_JOIN_SIZE被調到了600000,同時也關閉了sql_big_selects,當查詢優化器估算所檢查的行數超過600000時,查詢將被終止掉。
解決方法:
方法一、將sql_big_selects打開。
mysql> set global sql_big_selects=1;
Query OK, 0 rows affected (0.00 sec)
同時修改MySQL配置文件。
方法二、調大max_join_size
mysql> set global max_join_size=18446744073709551615;
Query OK, 0 rows affected (0.00 sec)
同時修改MySQL配置文件。
方法三、查詢表添加索引,優化查詢。