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

A ordem das tabelas em junções diretas, sem diretivas de dica, afeta o desempenho?


Resposta à sua pergunta - Sim, a ordem da mesa faz diferença na junção.

Você também pode informar o otimizador sobre o plano de execução.

A dica ORDERED faz com que o Oracle una as tabelas na ordem em que aparecem na cláusula FROM.

Por exemplo, esta instrução une a tabela TAB1 à tabela TAB2 e, em seguida, une o resultado à tabela TAB3:
 SELECT /*+ ORDERED */ TAB1.COL1, TAB2.COL2, TAB3.COL3
     FROM TAB1, TAB2, TAB3
    WHERE TAB1.COL1 = TAB2.COL1
         AND TAB2.COL1 = TAB3.COL1;

Se você omitir a dica ORDERED de uma instrução SQL executando uma junção, o otimizador escolherá a ordem na qual unir as tabelas. Você pode querer usar a dica ORDERED para especificar uma ordem de junção se souber algo sobre o número de linhas selecionadas de cada tabela que o otimizador não sabe. Essas informações permitiriam que você escolhesse uma tabela interna e externa melhor do que o otimizador.

Normalmente, se você analisar as tabelas, o otimizador seleciona um plano estrela eficiente. Você também pode usar dicas para melhorar o plano. O método mais preciso é ordenar as tabelas na cláusula FROM na ordem das chaves no índice, com a tabela grande por último. Então use as seguintes dicas:
/*+ ORDERED USE_NL(FACTS) INDEX(FACTS FACT_CONCAT) */