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

Uma antijunção é mais eficiente que uma junção externa esquerda?


Quando você usa "não existe" ou "não está" em sua consulta SQL, você permite que o Oracle escolha caminhos de acesso anti-junção de mesclagem ou anti-associação de hash.

Explicação rápida

Por exemplo, dada a junção entre a tabela A e B (de A junção B em A.x =B.x) o Oracle buscará todos os dados relevantes da tabela A e tentará combiná-los com as linhas correspondentes na tabela B, portanto, depende estritamente da seletividade da tabela Um predicado.

Ao usar a otimização anti-join, o Oracle pode escolher a tabela com maior seletividade e combiná-la com a outra, o que pode resultar em um código muito mais rápido.

Ele não pode fazer isso com junção ou subconsulta regular, porque não pode assumir que uma correspondência entre as tabelas A e B é suficiente para retornar essa linha.

Dicas relacionadas: HASH_AJ, MERGE_AJ.

Mais:

Isso parece um artigo bom e detalhado sobre o assunto.

Aqui é outro artigo mais decente.