统计关注人数时的加载时间

Loading time when counting numbers of followers

假设我将从我的项目中获得某个内容的所有关注者;这是我的数据库

table
  contents
  users

现在,每次我想获得内容的关注者数量时,我都会在此处 table 与名为 content-followers.[=12= 的用户建立联系]

table
  contents
  users
  content-followers <
    columns
      user_id
      content_id

现在我担心的是这会 运行 获取内容的关注者数量,但这将与其他查询和内容一起,我知道它可能 sql 变慢正在进行中。

看,每次人们访问内容时,我都必须显示该计数,但该计数(如我所想)将 运行 贯穿整个 table 只是为了计数。

还有其他方法可以让它变得简单吗?比如某个时间只计数一次并保存到目录table?

我没有合适的数据库课程,所以提前感谢大家的帮助!

CREATE TABLE ContentFollowers (
    user_id ...,
    content_id ...,
    PRIMARY KEY(user_id, content_id),
    INDEX(content_id, user_id)
) ENGINE=InnoDB;

SELECT  ...,
        ( SELECT COUNT(*) FROM ContentFollowers
             WHERE user_id = u.id
        ) AS follower_count
    FROM Contents AS c
    JOIN Users AS u  ON ...
    WHERE ...

COUNT(*) 将有效地使用 ContentFollowersPRIMARY KEY。增加的时间将是几毫秒,即使有数百万用户和内容也是如此。

如果您想进一步讨论,请提供每个相关 table 的 SHOW CREATE TABLE 和您的暂定 SELECT(将比我指定的更多)。所以“......只计算一次......”应该是不必要的(而且很麻烦)。

一个“用户”是否可以多次“关注”一个“内容”?这是一个可能会弄乱你的数字的黑客,但我认为我在这里所说的避免了这种可能性。 (PRIMARY KEY 包含一个 'uniqueness' 约束。)如果没有这个,用户可以重复点击 [关注] 来夸大 'followers'.

的数量

到目前为止,我认为不需要TRIGGER。此外,触发器将重新打开上述 'hack'.

的可能性