Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Optimiert MySQL Unterabfragen automatisch?

Leider ist MySQL nicht sehr gut darin, Unterabfragen mit IN zu optimieren. Dies stammt aus der MySQL-Dokumentation :

Versuchen Sie es stattdessen mit einem JOIN.

Da MySQL von innen nach außen arbeitet, können Sie MySQL manchmal austricksen, indem Sie die Unterabfrage wie folgt in eine weitere Unterabfrage einpacken:

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

Hier ist die JOIN-Lösung:

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'

Beachten Sie, dass ich von innen beginne und auch nach außen gehe.