更新具有大量数据的表中的行

时间:2012-08-02 08:17:14

标签: mysql

我必须更新当前views的{​​{1}}。从表格post中获取数据> 2百万。并且页面的加载时间很慢。

表:

posts

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 iduser Index idpost

如果我分离数据并创建新表Primary key并使用post_views来获取视图的值。起初它会很快,因为新表仍然很小,但随着时间的推移,她也会有> 2百万行。而且它会很慢。你如何处理巨大的桌子?

1 个答案:

答案 0 :(得分: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_views上的每次更新后中更新此表中的相应值。因此,您将直接删除LEFT JOIN并访问总视图数。

但是,更新每个更新也会产生开销。要提高效果,您可以在total_post_views每次更新后放弃更新post_views。如果选择这种方式,则可以执行更新:

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

通过这种方式,您将获得近似结果。如果这是可以忍受的,那么我建议你这样做。