因此,我有以下查询:
SELECT DISTINCT d.iID1 as 'id',
SUM(d.sum + d.count*r.lp)/sum(d.count) AS avgrat
FROM abcd i, abce r, abcf d
WHERE r.aID = 1 AND
d.iID1 <> r.rID AND d.iID2 = r.rID GROUP BY d.iID1
ORDER BY avgrat LIMIT 50;表中数以百万计的条目的问题是,SUM()和GROUP BY会冻结query....is,有一种方法可以使用MySQL和/或perhaps立即执行(也许用PHP....but做求和,我该怎么做……)
发布于 2011-08-26 13:11:33
直接回答这个问题:不,没有办法立即做任何事情。
如果您可以控制表的更新,或者添加相关记录的应用程序,那么您可以添加逻辑,在每次更新时使用sum、count和id更新另一个表。然后,修改后的查询以"sum表“为目标,简单地计算平均值。
发布于 2011-08-26 16:23:34
一种解决方案是使用源表上的触发器创建一个包含聚合值的汇总表,以使其保持最新。
您需要确定触发器的开销是否小于查询的开销。一些重要的因素包括:
源表的更新频率
聚合查询的运行频率。
https://stackoverflow.com/questions/7200204
复制相似问题