给出一个名为“orders_products”的MySQL表格,其中包含以下相关字段:
我正在运行以下查询:
- products_id(产品ID)
- orders_id(订单ID)
我正在运行以下查询:
SELECT products_id, count( products_id ) AS counter
FROM orders_products
WHERE orders_id
IN (
SELECT DISTINCT orders_id
FROM orders_products
WHERE products_id = 85094
)
AND products_id != 85094
GROUP BY products_id
ORDER BY counter DESC
LIMIT 4
这个查询非常耗时,大约需要20秒。除此之外,数据库并不是很忙碌,并且在其他查询上表现良好。
我想知道,是什么导致查询如此缓慢?
这个表相当大(大约有150万行,大小约为210 mb),这可能是内存问题吗?
有没有办法精确地告诉我SQL为何如此缓慢?
Explain的输出:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY orders_products range products_id products_id 4 NULL 1577863 Using where; Using temporary; Using filesort
2 DEPENDENT SUBQUERY orders_products ref orders_id,products_id products_id 4 const 2 Using where; Using temporary
explain
的输出吗? - Rup