使用JOIN重写此IN查询以获得快速结果

时间:2014-01-07 10:57:11

标签: mysql join

我有这个查询,但它需要30分钟来计算。我知道IN很慢,但寻找一个联接替代方案。

SELECT *, COUNT(*) as Results from member_preferences_products_data
        WHERE member_preferences_products_data.Member_ID IN (SELECT Member_ID from member_preferences_products_data WHERE Product_ID = '623')
        GROUP by Product_ID
        ORDER by Results asc
        LIMIT 10

1 个答案:

答案 0 :(得分:0)

直接替换您的查询将是

SELECT *, COUNT(*) as Results 
FROM member_preferences_products_data
INNER JOIN 
(
    SELECT DISTINCT Member_ID
    FROM member_preferences_products_data 
    WHERE Product_ID = '623'
) Sub1
ON member_preferences_products_data.Member_ID = Sub1.Member_ID
GROUP by Product_ID
ORDER by Results asc
LIMIT 10

但是我对你要找的东西感到有点困惑。您似乎想要计算每个产品ID的行数,其中该产品ID已由购买产品ID 623的会员购买。

另外,如果字段Product_ID是字符串或INT。如果INT不需要引号,但如果它是一个字符串,那么它可能比INT字段慢,假设值是数字