Caros amigos
Hoje me deparei com um problema estranho. Sem qualquer motivo aparente, varias aplicacoes do meu projeto deixaram de funcionar, e sempre aparecia algo como :
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
Ao entrar em contato com a Netmake para esclarecer o assunto, descobri que eles mexeram na configuracão do servidor de desenvolvimento, afetando todos os meus projetos.
Segundo eles, eu deveria reescrever todas as minhas consultas, e evitar usar LEFT joins, pois as consultas mais simples poderiam sobrecarregar o servidor. A outra solucao, é que eu deveria usar um VPS.
Particularmente eu achei um absurdo, pois nao disseram isso no ato da venda. E ninguem me convence que tabelas com menos de 5.000 linhas possam sobrecarregar um servidor.
Uma das solucoes apresentadas pelo pessoal de lá foi o uso de subselects, o que eu achei uma tremenda gambiarra, principalmente se eu precisar de varios campos que normalmente seriam recuperados de um left join.
Enfim, eu queria entender melhor, saber se alguem ja passou por isso, e como foi que resolveu.
A titulo de exemplo, uma consulta que uso com frequencia é essa aqui.
Select tabela1.valor - tabela2.valor - tabela3.valor - tabela4.valor
left join (select sum(valor) as valor from tabela1 where condicao2) tabela2 on 1
left join (select sum(valor) as valor from tabela2 where condicao3) tabela3 on 1
left join (select sum(valor) as valor from tabela3 where condicao4) tabela4 on 1
from tabela 1
where
condicao1
Tabela1 tem aproximadamente 1500 registros
Tabela2,Tabela3 e Tabela4 tem aproximadamente entre 3mil e 5mil registros
Nao vejo nada de errado nesta consulta, e sempre funcionou, até hoje quando a netmake mexeu no servidor.