2007-02-19

A diferença entre o IN e o EXISTS

Muitas vezes é que colocada a questão sobre a diferença de performance do uso do IN e do EXISTS.

A diferença será talvez mais evidente se se pensar em termos de color o optimizador vai execurar o query e das linhas da tabelas.

Se se usar o IN estamos a dizer que queremos que o query no IN seja o "motor" do processo. Ou seja primeiro resolver o IN e depois resolver o query externo.

No caso do EXISTS é exactamente o contrário, ou seja, resolve o query externo e para cada resultado resolve o interno.

Normalmente o EXISTS é melhor pois especifica uma condição de junção e normalmente usa somente indices ( se não for assim vamos sentir uma degradação da performance).
No entanto, quando o query do IN devolve poucos resultados torna-se mais rápido. Se o IN por outro lado usar junções para o query externo a performance vai-se degradar pois obrigará a executar o IN para cada resultado do query externo.

Como tudo com as DBs não há receitas para todos os casos, testem , testem , testem ...com um volume de dados comparável ao esperado em produção!!


Bom codding!

No comments:

Post a Comment

Os comentários são moderados.
The comments are moderated.