Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A ordem das tabelas referenciadas na cláusula ON do JOIN importa?


JOIN ordem pode ser forçada colocando as tabelas na ordem correta no FROM cláusula:

  1. MySQL tem uma cláusula especial chamada STRAIGHT_JOIN o que torna a ordem importante.

    Isso usará um índice em b.id :
    SELECT  a.Name, b.Status
    FROM    a
    STRAIGHT_JOIN
            b
    ON      b.ID = a.StatusID
    

    E isso usará um índice em a.StatusID :
    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    

  2. Oracle tem uma dica especial ORDERED para impor o JOIN pedido:

    Isso usará um índice em b.id ou construa uma tabela de hash em b :
    SELECT  /*+ ORDERED */
            *
    FROM    a
    JOIN    b
    ON      b.ID = a.StatusID
    

    E isso usará um índice em a.StatusID ou construa uma tabela de hash em a :
    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    

  3. O SQL Server tem uma dica chamada FORCE ORDER para fazer o mesmo:

    Isso usará um índice em b.id ou construa uma tabela de hash em b :
    SELECT  *
    FROM    a
    JOIN    b
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    

    E isso usará um índice em a.StatusID ou construa uma tabela de hash em a :
    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    

  4. Pessoal do PostgreSQL, desculpe. Sua lista de tarefas diz:

    Dicas do otimizador (não desejadas)

    As dicas do otimizador são usadas para solucionar problemas no otimizador. Preferimos que os problemas sejam relatados e corrigidos.

Quanto à ordem na comparação, não importa em nenhum RDBMS , ATÉ ONDE SEI.

Embora eu pessoalmente sempre tente estimar qual coluna será pesquisada e coloco essa coluna à esquerda (para parecer um lvalue ).

Veja esta resposta para mais detalhes.