所以我有以下查询:
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总结......但我该如何去做...)
答案 0 :(得分:1)
回答直接问题:不,瞬间无法做任何事情。
如果您可以控制表更新或添加相关记录的应用程序,那么您可以添加逻辑,使用每次更新的sum,count和id更新另一个表。然后修改后的查询以“和表”为目标,并轻松计算平均值。
答案 1 :(得分:0)
一种解决方案是创建一个包含聚合值的汇总表 在源表上使用触发器使其保持最新。
您需要确定触发器的开销是否小于查询的开销。 一些重要因素是:
源表的频率更新
聚合查询的运行频率。