目前我有一张接近100万行的表格需要进行查询。我需要根据给定的产品ID列表,对包含产品数量进行排名。
SELECT count(productID) AS commonProducts, packageID
FROM supply
WHERE productID IN (2,3,4,5,6,7,8,9,10)
GROUP BY packageID
ORDER BY commonProducts
DESC LIMIT 10
这个查询已经能够正常工作,但我希望能进行改进。我尝试了在productId和packageID上建立复合索引,但相比于单独为每个列建立索引,它似乎会查找更多的行。
MySQL解释器
select_type: SIMPLE
table: supply
type: range
possible_keys: supplyID
key: supplyID
key_len: 3
ref: null
rows: 996
extra: Using where; Using temporary; Using filesort
我的主要关注点是查询使用了临时表和文件排序。我该如何优化这个查询?我认为最大的问题是 count() 函数和对 count() 函数结果的 ORDER BY 操作。