我必须更新当前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百万行。而且它会很慢。你如何处理巨大的桌子?
答案 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
。如果选择这种方式,则可以执行更新:
post_views
的某些更新计数之后,例如每30次更新。通过这种方式,您将获得近似结果。如果这是可以忍受的,那么我建议你这样做。