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.