我正在一个带有简单规范化数据库的网站上工作.
有一个名为Pages的表和一个名为Views的表.每次查看页面时,该视图的唯一记录都会记录在"视图"表中.
在网站上显示页面时,我使用简单的MySQL COUNT()来总计显示的视图数量.
数据库设计看起来很好,除了这个问题:我对如何在数千个页面中检索前10个最常查看的页面感到茫然.
我应该通过添加Pages.views列来对页面表进行非规范化,以保存每个页面的总观看次数吗?或者是否有一种有效的方法来查询前10个最常查看的页面?
SELECT p.pageid, count(*) as viewcount FROM pages p inner join views v on p.pageid = v.pageid group by p.pageid order by count(*) desc LIMIT 10 OFFSET 0;
我不能测试这个,但是沿着这些方向.我不会存储该值,除非我必须由于性能限制(我刚学会了术语"过早优化",如果你这样做,它似乎适用).