我有一个表,其中存储每个产品的用户的评级。该表由以下字段组成,productid、userid、rows (Out of 5)...This表将来可能包含一百万行.
因此,为了选择前5名产品,我使用以下查询::。
SELECT productid, avg( rating ) as avg_rating
from product_ratingstblx245v
GROUP BY productid
ORDER BY avg( rating ) DESC
LIMIT 5我的问题是,既然我将在我的网站的几页上显示这一结果,那么是否最好为productid、average、pages 字段的平均收视率保留一个单独的表?
发布于 2009-08-24 21:32:07
如果MySql不能以(子)毫秒的速度来处理像您上面这样的简单表模式的100多万条记录的查询,那么我真的很想知道为什么公司会在LOB应用程序中使用它。
事实上,我是一个MySql开发人员,所以我对MySql的能力不太了解。但是,假设它的数据库引擎与Sql服务器一样好(我已经听说了关于Sql的好消息),您就不必担心性能问题了。如果您确实想调整它,那么为什么不将结果缓存10分钟(或更长时间)到您的应用层呢?触发器通常是纯粹的(尽管有时是必要的)邪恶。Sql服务器是为要执行、信任Sql的查询类型而设计的。
发布于 2009-08-24 21:01:54
你还不需要那个问题的答案。您可以从视图开始,这是执行上述查询的结果。如果在执行负载测试(例如使用JMeter)之后,您看到站点运行得确实很慢,则可以使用临时表(存储在内存中)替换视图。由于视图和临时表从外部看起来是一样的,所以您不必更改业务逻辑。
发布于 2009-08-24 21:08:41
就我个人而言,我不喜欢这样计算总数,但如果有需要的话,我不会储存平均数,我会储存总票数和总评等。这样,这是一个非常简单的更新查询(将1添加到总票数,并将评级添加到总评等)。然后,您可以在最短的时间内计算平均时间。
至于你如何处理这件事,我会使用触发器,就像有人已经建议的那样。但只有在尝试了别人建议的观点之后。
https://stackoverflow.com/questions/1324712
复制相似问题