总计应该非规范化吗?

chi*_*ior 4 mysql denormalization

我正在一个带有简单规范化数据库的网站上工作.

有一个名为Pages的表和一个名为Views的表.每次查看页面时,该视图的唯一记录都会记录在"视图"表中.

在网站上显示页面时,我使用简单的MySQL COUNT()来总计显示的视图数量.

数据库设计看起来很好,除了这个问题:我对如何在数千个页面中检索前10个最常查看的页面感到茫然.

我应该通过添加Pages.views列来对页面表进行非规范化,以保存每个页面的总观看次数吗?或者是否有一种有效的方法来查询前10个最常查看的页面?

cdo*_*ner 8

   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;
Run Code Online (Sandbox Code Playgroud)

我不能测试这个,但是沿着这些方向.我不会存储该值,除非我必须由于性能限制(我刚学会了术语"过早优化",如果你这样做,它似乎适用).

  • +1提到在出现性能问题之前不存储总数。 (2认同)