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

¿MySQL optimiza las subconsultas automáticamente?

Desafortunadamente, MySQL no es muy bueno para optimizar subconsultas con IN. Esto es de documentación de MySQL :

Intenta usar un JOIN en su lugar.

Debido a que MySQL funciona de adentro hacia afuera, a veces puede engañar a MySQL envolviendo la subconsulta dentro de otra subconsulta de esta manera:

SELECT COUNT(*) FROM table_name WHERE device_id IN
     (SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)

Aquí está la solución JOIN:

SELECT COUNT(DISTINCT t2.id) FROM table_name t1
  JOIN table_name t2
    ON t2.device_id = t1.device_id
  WHERE t1.NAME = 'SOME_PARA'

Fíjate que empiezo desde adentro y salgo también.