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

MySQL ottimizza automaticamente le sottoquery?

Sfortunatamente, MySQL non è molto bravo a ottimizzare le sottoquery con IN. Questo proviene da documentazione MySQL :

Prova invece a utilizzare un JOIN.

Poiché MySQL funziona dall'interno verso l'esterno, a volte puoi ingannare MySQL avvolgendo la sottoquery all'interno di un'altra sottoquery in questo modo:

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

Ecco la soluzione 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'

Nota che parto dall'interno ed esco anche.