Tyvärr är MySQL inte särskilt bra på att optimera subqueries med IN. Detta är från MySQL-dokumentation :
Testa att använda en JOIN istället.
Eftersom MySQL fungerar inifrån och ut, kan du ibland lura MySQL genom att linda in underfrågan i ytterligare en underfråga så här:
SELECT COUNT(*) FROM table_name WHERE device_id IN
(SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)
Här är 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ägg märke till att jag börjar inifrån och går ut också.