MySQL er desværre ikke særlig god til at optimere underforespørgsler med IN. Dette er fra MySQL-dokumentation :
Prøv at bruge en JOIN i stedet.
Fordi MySQL fungerer indefra og ud, kan du nogle gange snyde MySQL ved at pakke underforespørgslen inde i endnu en underforespørgsel som sådan:
SELECT COUNT(*) FROM table_name WHERE device_id IN
(SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)
Her er JOIN-løsningen:
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'
Læg mærke til, at jeg starter indefra og også går ud.