统计关注人数时的加载时间
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(*)
将有效地使用 ContentFollowers
的 PRIMARY KEY
。增加的时间将是几毫秒,即使有数百万用户和内容也是如此。
如果您想进一步讨论,请提供每个相关 table 的 SHOW CREATE TABLE
和您的暂定 SELECT
(将比我指定的更多)。所以“......只计算一次......”应该是不必要的(而且很麻烦)。
一个“用户”是否可以多次“关注”一个“内容”?这是一个可能会弄乱你的数字的黑客,但我认为我在这里所说的避免了这种可能性。 (PRIMARY KEY
包含一个 'uniqueness' 约束。)如果没有这个,用户可以重复点击 [关注] 来夸大 'followers'.
的数量
到目前为止,我认为不需要TRIGGER
。此外,触发器将重新打开上述 'hack'.
的可能性
假设我将从我的项目中获得某个内容的所有关注者;这是我的数据库
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(*)
将有效地使用 ContentFollowers
的 PRIMARY KEY
。增加的时间将是几毫秒,即使有数百万用户和内容也是如此。
如果您想进一步讨论,请提供每个相关 table 的 SHOW CREATE TABLE
和您的暂定 SELECT
(将比我指定的更多)。所以“......只计算一次......”应该是不必要的(而且很麻烦)。
一个“用户”是否可以多次“关注”一个“内容”?这是一个可能会弄乱你的数字的黑客,但我认为我在这里所说的避免了这种可能性。 (PRIMARY KEY
包含一个 'uniqueness' 约束。)如果没有这个,用户可以重复点击 [关注] 来夸大 'followers'.
到目前为止,我认为不需要TRIGGER
。此外,触发器将重新打开上述 'hack'.