Um
Plano de explicação
teria mostrado porque exatamente você deveria usar Exists
. Geralmente a pergunta vem Exists vs Count(*)
. Existe
é mais rápido. Por quê? -
Com relação aos desafios apresentados por NULL:quando subconsulta retornaNull
, para IN a consulta inteira se tornaNull
. Então você precisa lidar com isso também. Mas usandoExist
, é apenas umfalse
. Muito mais fácil de lidar. SimplesmenteIN
não pode comparar nada comNull
masExiste
posso.
-
por exemplo.Existe (Selecione * de sua tabela onde bla ='blabla');
você obtém verdadeiro/falso no momento em que um resultado é encontrado/combinado .
-
Neste casoIN
meio que toma a posição doCount(*)
para selecionar TODOS linhas correspondentes com base emWHERE
porque está comparando todos os valores.
Mas também não se esqueça disso:
EXISTE
é executado em alta velocidade emIN
:quando os resultados da subconsulta são muito grandes.EM
fica à frente deEXISTS
:quando os resultados da subconsulta são muito pequenos.
Consulte para obter mais detalhes: