首页 > 解决方案 > 由于大“IN”子句,如何优化此查询,因为此 strted 挂起

问题描述

我有以下查询:

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 但仍然挂起。

标签: mysql

解决方案


我没有测试查询,但根据需要调整或重写它应该不难。而不是大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

推荐阅读