Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL optimise-t-il automatiquement les sous-requêtes ?

Malheureusement, MySQL n'est pas très bon pour optimiser les sous-requêtes avec IN. Ceci provient de la documentation MySQL :

Essayez plutôt d'utiliser un JOIN.

Parce que MySQL fonctionne de l'intérieur vers l'extérieur, vous pouvez parfois tromper MySQL en enveloppant la sous-requête dans une autre sous-requête comme ceci :

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

Voici la solution 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'

Remarquez que je commence par l'intérieur et que je sors aussi.