1

我必须更新views当前的post. 来自表posts女巫的数据> 200万。并且页面的加载时间很慢。

表:

idpost | iduser | views | title        |
1      | 5675   | 45645 | some title   |
2      | 345    | 457   | some title 2 |
6      | 45     | 98    | some title 3 |
and many more... up to 2 millions

iduserIndexidpostPrimary key。_

如果我分离数据并制作一个新表post_views并用于LEFT JOIN获取视图的值。起初它会很快,因为新表仍然很小,但随着时间的推移,她也会有 > 200 万行。而且它会很慢。你如何处理巨大的桌子?

4

1 回答 1

1

拆分表

您应该拆分表以分隔不同的内容并防止title数据重复。这将是一个更好的设计。我建议以下架构:

posts(idpost, title)    
post_views(idpost, iduser, views)

更新views计数

您一次只需要更新views一行。因为,有人查看您的页面,然后您更新相关行。因此,一次只更新一行而没有搜索开销(感谢键和索引)。我不明白这怎么会造成开销?

合计views

您可能会运行这样的查询:

SELECT SUM(views) FROM post_views WHERE idpost = 100

是的,这可能会产生开销。一个解决方案可能是在每次更新后创建一个新表并更新total_post_views该表中的相应值。因此,您将摆脱并直接访问总观看次数。post_viewsLEFT JOIN

但是,每次更新的更新也会产生开销。为了提高性能,您可以total_post_views在每次更新post_views. 如果您选择这种方式,您可以执行更新:

  • 定期,比如每 30 秒,
  • 在某些更新计数之后post_views,例如每 30 次更新。

这样,您当然会得到近似的结果。如果这是可以忍受的,那么我建议你走这条路。

于 2012-08-02T08:52:00.013 回答