Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O MySQL otimiza as subconsultas automaticamente?


Infelizmente, o MySQL não é muito bom em otimizar subconsultas com IN. Isso é da documentação do MySQL :

Tente usar um JOIN em vez disso.

Como o MySQL funciona de dentro para fora, às vezes você pode enganar o MySQL envolvendo a subconsulta dentro de outra subconsulta assim:
SELECT COUNT(*) FROM table_name WHERE device_id IN
     (SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)

Aqui está a solução 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'

Observe que eu começo de dentro e saio também.