Czasami zdarza się, że zamiast oczekiwanego efektu wykonanie SELECT’a kończy się poniższym błędem:
1104 - 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</span>
Dzieje się tak wtedy, gdy optimizer MySQL uzna, że dane zapytanie musi sprawdzić większą ilość rekordów niż wartość zmiennej max_join_size. Zmienna ta ma na celu zabezpieczenie serwera przed wykonaniem zapytań, które trwałyby kosmicznie długo. Domyślnie przyjmuje wartość 4G (4*1024*1024*1024). Wydaje się to dużo, ale w praktyce okazuje się, że taki limit prosto przekroczyć.
Tworzymy następujące tabele:
CREATE DATABASE test;
CREATE TABLE `test`.`tab1` (id_1 INT AUTO_INCREMENT, kol11 VARCHAR(20), kol12 VARCHAR(20), PRIMARY KEY (id_1));
CREATE TABLE `test`.`tab2` (id_1 INT AUTO_INCREMENT, id_2 INT, kol21 VARCHAR(20), kol22 VARCHAR(20), PRIMARY KEY (id_1));
CREATE TABLE `test`.`tab3` (id_1 INT AUTO_INCREMENT, id_2 INT, kol31 VARCHAR(20), kol32 VARCHAR(20), PRIMARY KEY (id_1));
CREATE TABLE `test`.`tab1` (id_1 INT AUTO_INCREMENT, kol11 VARCHAR(20), kol12 VARCHAR(20), PRIMARY KEY (id_1));
CREATE TABLE `test`.`tab2` (id_1 INT AUTO_INCREMENT, id_2 INT, kol21 VARCHAR(20), kol22 VARCHAR(20), PRIMARY KEY (id_1));
CREATE TABLE `test`.`tab3` (id_1 INT AUTO_INCREMENT, id_2 INT, kol31 VARCHAR(20), kol32 VARCHAR(20), PRIMARY KEY (id_1));