Helaas is MySQL niet erg goed in het optimaliseren van subquery's met IN. Dit komt uit MySQL-documentatie :
Probeer in plaats daarvan een JOIN te gebruiken.
Omdat MySQL van binnenuit werkt, kun je MySQL soms misleiden door de subquery in weer een andere subquery te stoppen, zoals:
SELECT COUNT(*) FROM table_name WHERE device_id IN
(SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)
Dit is de JOIN-oplossing:
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'
Merk op dat ik van binnenuit begin en ook naar buiten ga.