Erro MAX_JOIN_SIZE

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.

1 Curtida

Saia do provedor e busque outro.

Existem diversas outras opções baratas e com mais recursos e menos erros.

Concordo plenamente com você.

2 Curtidas

Nos meus servidores compartilhados não tenho esta limitação de join.
Vai de provedor para provedor.
Mas deveriam pelo menos avisar antes de mudar.

1 Curtida

Bom dia, tratando-se de um banco MySQL, para resolver esse problema, caso seja numa aplicação de consulta. Você deve ir nas propriedades do SQL, no campo: Preparação SQL informa o seguinte comando:

SET SQL_BIG_SELECTS=1

Espero ter ajudado, abraços !!!

1 Curtida

depois de 4 anos… :thinking: :thinking: :thinking: :thinking: :thinking:

1 Curtida

Obrigado Jamerson, mesmo depois de tanto tempo me ajudou muito.
Já havia criado os índices e obrigado o usuário a fazer filtros e o erro persistia… usando sua dica no Prepare, resolveu.

vaaaaleu !!!