Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Existe um limite para o InnerJoin?


Você não tem nem perto do limite de JOINs para MySQL. Seu número de junções não é ruim. No entanto, ingressar em uma tabela derivada (sua subconsulta interna) conforme você está fazendo pode causar problemas de desempenho, pois as tabelas derivadas não têm índices. A execução de uma junção em uma tabela derivada sem índices pode ser lenta.

Você deve considerar fazer uma tabela temporária real com índices para junção ou descobrir uma maneira de evitar a subconsulta.

Um JOIN no MySQL é basicamente como fazer uma pesquisa (procurar) para cada linha unida. Portanto, o MySQL terá que realizar muitas pesquisas se você estiver juntando muitos registros. É menos sobre quantas tabelas você une do que o número de linhas que você une que pode ser um problema.

De qualquer forma, o MySQL só realizará algumas buscas antes de desistir e apenas ler a tabela inteira. Ele faz um bom trabalho em decidir qual será mais barato.

Talvez a melhor coisa que você possa fazer é ajudá-lo a adivinhar atualizando as estatísticas do índice com ANALYZE TABLE.

Você pode ter uma cláusula WHERE por SELECT. Portanto, sua subconsulta interna terá uma cláusula WHERE e sua consulta externa terá uma cláusula WHERE, e elas serão aplicadas após o JOIN (pelo menos logicamente, embora o MySQL geralmente as aplique primeiro para desempenho).

Além disso, tudo isso pressupõe que você saiba como usar os índices corretamente.