我有一个MySQL DB,包含网站页面的条目。 我们假设它有以下字段:
Table pages:
id | title | content | date | author
每个页面都可以由用户投票,因此我有两个其他表格
Table users:
id | name | etc etc etc
Table votes:
id | id_user | id_page | vote
现在,我有一个页面,其中显示了一个页面列表(一次10-50个),其中包含各种信息以及页面的平均投票。
所以,我想知道它是否更好:
a)运行查询以显示页面(请注意,这在查询三个表时已经相当繁重)然后为每个条目执行另一个查询以计算平均投票(或者向主查询添加第四个连接? )。
或
b)在页面表中添加“平均投票”列,当用户对页面进行投票时,我将更新该表(以及投票表)。
尼科
答案 0 :(得分:6)
使用数据库来达到它的意义;选项a是目前为止你最好的选择。值得注意的是,你的查询实际上并不特别重,加入了三个表; SQL真的很擅长这种事情。
谨慎对待这种过早优化SQL的尝试; SQL的功能远比大多数人认为的要高得多。
请注意,使用您的选项a的另一个好处是,维护的代码更少,并且在代码更新时数据分散的可能性更小;这是一个生命周期的好处,而且它们经常被忽略,因为它们具有极小的优化效果。
答案 1 :(得分:1)
为了表现,你可能会“重复自己”(违反DRY)。权衡取舍是:(a)额外存储,以及(b)在数据库中保持一致性的额外工作。
两种方式都有优点/缺点。然而,过早优化会产生一系列陷阱。
答案 2 :(得分:1)
老实说,对于这个问题,我会建议更多信息。在我看来,多个页面的多个投票确实可以为服务器带来沉重的负担。如果您想要在您的网站上拥有真正的流量,当然......: - )