gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:42:22 25 4
gpt4 key购买 nike

我必须更新当前 postviews。从表 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 获取 View 的值。起初它会很快,因为新表仍然很小,但随着时间的推移,她也会有超过 200 万行。再一次它会很慢。你如何处理巨大的表?

最佳答案

拆分表格

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

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

更新 views 计数

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

获取总观看次数

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

SELECT SUM(views) FROM post_views WHERE idpost = 100

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

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

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

这样,你当然会得到大概的结果。如果这是可以容忍的,那么我建议你走这条路。

关于mysql - 更新具有大量数据的表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com