获取MySQL之外的MySQL行总和的技巧

时间:2011-08-26 05:04:49

标签: php mysql performance

所以我有以下查询:

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会冻结查询....有没有办法做到这一点,即时执行使用MySQL和/或PHP黑客(也许用PHP总结......但我该如何去做...)

2 个答案:

答案 0 :(得分:1)

回答直接问题:不,瞬间无法做任何事情。

如果您可以控制表更新或添加相关记录的应用程序,那么您可以添加逻辑,使用每次更新的sum,count和id更新另一个表。然后修改后的查询以“和表”为目标,并轻松计算平均值。

答案 1 :(得分:0)

一种解决方案是创建一个包含聚合值的汇总表 在源表上使用触发器使其保持最新。

您需要确定触发器的开销是否小于查询的开销。 一些重要因素是:

源表的频率更新

聚合查询的运行频率。