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

Por que STRAIGHT_JOIN melhora tão drasticamente essa consulta e o que significa quando ela é escrita após a palavra-chave SELECT?


STRAIGHT_JOIN força a ordem de junção das tabelas, então table1 é escaneado no loop externo e table2 no laço interno.

O otimizador não é perfeito (embora ainda bastante decente), e a causa mais provável são as estatísticas desatualizadas.

Não, apenas quando o otimizador está errado. Isso pode ocorrer se sua distribuição de dados estiver muito distorcida ou não puder ser calculada corretamente (digamos, para índices espaciais ou de texto completo).

Você deve coletar as estatísticas, construir os planos para ambas as formas e entender o que esses planos significam.

Se você ver isso:

  1. O plano gerado automaticamente não é o ideal e não pode ser melhorado pelas formas padrão,

  2. O STRAIGHT_JOIN versão é melhor, você entende que sempre será e entende por que sempre será

, use STRAIGHT_JOIN .