sql >> Base de Datos >  >> RDS >> Mysql

Subconsultas con EXISTS vs IN - MySQL

Un Explain Plan te habría mostrado por qué exactamente deberías usar Exists . Por lo general, la pregunta surge Exists vs Count(*) . Exists es más rápido. ¿Por qué?

  • Con respecto a los desafíos presentados por NULL:cuando la subconsulta devuelve Null , para IN toda la consulta se convierte en Null . Entonces también debes manejar eso. Pero usando Exist , es simplemente un false . Mucho más fácil de sobrellevar. Simplemente IN no se puede comparar nada con Null pero Exists puede.

  • p.ej. Exists (Select * from yourtable where bla = 'blabla'); obtienes verdadero/falso en el momento en que se encuentra/coincide una coincidencia .

  • En este caso IN más o menos toma la posición de Count(*) para seleccionar TODO filas coincidentes basadas en WHERE porque está comparando todos los valores.

Pero tampoco olvides esto:

  • EXISTS se ejecuta a alta velocidad contra IN :cuando los resultados de la subconsulta son muy grandes.
  • IN se adelanta a EXISTS :cuando los resultados de la subconsulta son muy pequeños.

Referencia a para más detalles: