Mysql
 sql >> Database >  >> RDS >> Mysql

Sottoquery con EXISTS vs IN - MySQL

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 diventa Null . Quindi devi gestire anche quello. Ma usando Exist , è semplicemente un false . Molto più facile da affrontare. Semplicemente IN non posso confrontare nulla con Null ma Exists 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 di Count(*) per selezionare TUTTO righe corrispondenti in base a WHERE perché sta confrontando tutti i valori.

Ma non dimenticare nemmeno questo:

  • EXISTS viene eseguito ad alta velocità contro IN :quando i risultati della sottoquery sono molto grandi.
  • IN supera EXISTS :quando i risultati della sottoquery sono molto piccoli.

Riferimento a per maggiori dettagli: