给定的是一个名为“orders_products”的 mySQL 表,其中包含以下相关字段:
- products_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),这可能是内存问题吗?
有没有办法准确地说出 mySQL 花了这么长时间的原因?
解释的输出:
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