Un Explain Plan
ti avrebbe mostrato esattamente perché dovresti usare Exists
. Di solito la domanda è Exists vs Count(*)
. Exists
è più veloce. Perché?
-
Per quanto riguarda le sfide presenti da NULL:quando subquery restituisce
Null
, per IN l'intera query diventaNull
. Quindi devi gestire anche quello. Ma usandoExist
, è semplicemente unfalse
. Molto più facile da affrontare. SemplicementeIN
non posso confrontare nulla conNull
maExists
può. -
per esempio.
Exists (Select * from yourtable where bla = 'blabla');
diventi vero/falso nel momento in cui viene trovato/corrispondente a un risultato . -
In questo caso
IN
sorta di prende la posizione diCount(*)
per selezionare TUTTO righe corrispondenti in base aWHERE
perché sta confrontando tutti i valori.
Ma non dimenticare nemmeno questo:
EXISTS
viene eseguito ad alta velocità controIN
:quando i risultati della sottoquery sono molto grandi.IN
superaEXISTS
:quando i risultati della sottoquery sono molto piccoli.
Riferimento a per maggiori dettagli: