由于大的“ IN”子句而导致挂起,如何优化此查询

时间:2019-04-10 11:47:18

标签: mysql

我有followinf查询:

SELECT DISTINCT (
                        device_id
                        )
                        FROM ABC
                        WHERE app_id ='$appid'
                        AND device_type='Android'                       
                        AND device_id
                        IN (
                                SELECT device_id
                                FROM XYZ
                                WHERE application_id = '$appid'
                                AND device_type='Android'
                                AND device_mode='$device_mode'

                            )

在IN子句中,我有6000多个项目的数组。因此它开始挂起。请让我知道如何进行优化。

PS:我已经阅读了其他解决方案,尝试使用join,但是仍然挂起。

1 个答案:

答案 0 :(得分:0)

我没有测试查询,但是调整它或根据需要重写它并不难。只需执行IN()并提供正确的INNER JOIN

即可,而不是庞大的WHERE列表
SELECT first.device_id 

FROM ABC first

INNER JOIN XYZ second ON first.device_id = second.device_id

WHERE first.app_id = '$appid' 

AND first.device_type = 'Android' 
AND second.application_id = '$appid' 
AND second.device_type = 'Android' 
AND second.device_mode = '$device_mode'

GROUP BY first.device_id