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. SemplicementeINnon posso confrontare nulla conNullmaExistspuò. -
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
INsorta di prende la posizione diCount(*)per selezionare TUTTO righe corrispondenti in base aWHEREperché sta confrontando tutti i valori.
Ma non dimenticare nemmeno questo:
EXISTSviene eseguito ad alta velocità controIN:quando i risultati della sottoquery sono molto grandi.INsuperaEXISTS:quando i risultati della sottoquery sono molto piccoli.
Riferimento a per maggiori dettagli: