我有这个查询,但它需要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
答案 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字段慢,假设值是数字