Thật không may, MySQL không tốt trong việc tối ưu hóa các truy vấn con bằng IN. Đây là từ tài liệu MySQL :
Hãy thử sử dụng THAM GIA để thay thế.
Bởi vì MySQL hoạt động từ trong ra ngoài, đôi khi bạn có thể đánh lừa MySQL bằng cách gói truy vấn con bên trong một truy vấn con khác như vậy:
SELECT COUNT(*) FROM table_name WHERE device_id IN
(SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)
Đây là giải pháp THAM GIA:
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ưu ý rằng tôi bắt đầu từ bên trong và đi ra ngoài.