gpt4 book ai didi

php - 我应该将更新的计数作为用户表的一部分吗?

转载 作者:行者123 更新时间:2023-11-29 12:03:55 30 4
gpt4 key购买 nike

假设我有一个包含两个表的数据库:用户和帖子。第一个表包含每个用户的一行,第二个表包含用户撰写的每个帖子的行。如果我想在用户个人资料上显示帖子计数,这两种策略中哪一种效果最好:

  1. 每次用户创建帖子时,我都会更新 Users 表,+1 字段 PostCount;
  2. 当有人访问个人资料时,我只需运行一条 select 语句即可获取帖子计数,例如 SELECT COUNT(post_id) FROM Posts WHERE id_user = 100;

在第一种情况下,我必须经常更新表,这可能很糟糕,因为我相信更新时表会被锁定;在第二种情况下,每次用户访问个人资料时我都必须运行计数。哪种毒最不苦?还有其他办法吗?

最佳答案

我想说这取决于您将显示 PostCount 的次数,尤其是对于大量用户而言。如果您要在一个被多次调用的页面上为 1000 多个用户显示它,那么第一个解决方案应该是最好的。但你需要做transactions确保添加新帖子时帖子和用户表都会更新。

否则,第二个解决方案应该足够了,但您应该使用 LEFT OUTER JOIN这样您只需一次查询即可从 Users 和 Posts 表中获取信息。例如:

SELECT * 
FROM Users u
LEFT OUTER JOIN (
SELECT user_id , COUNT(*) AS posts_count
FROM Posts
GROUP BY user_id
) p ON p.user_id = u.id
WHERE u.id = :searched_id

(无论如何,您应该使用缓存系统,这样如果向多个用户显示,您就不必对同一页面执行相同的 SQL 查询。)

关于php - 我应该将更新的计数作为用户表的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31896373/

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