有计数列是好的设计还是每次使用join命令更好?

时间:2017-07-12 02:20:59

标签: mysql database

假设有用户,帖子和类似的表,并且像表有user_id和post_id外键来表示谁喜欢哪个帖子。在post中使用like_count列(并通过类似表中的触发器命令更新它)或每次我需要查询类似计数时使用join命令更好吗?

我首先认为使用join命令更好,但是在使用它一段时间之后,现在我认为拥有like_count可能是更好的选择。有时候我需要在实际情况下加入很多表,并且使用额外的join命令只获得某些帖子的数量似乎比使用count_post列更糟糕。请告诉我。

*我搜索了类似的讨论,但失败了所以我发布了这个问题。如果这是重复的,请告诉我。

1 个答案:

答案 0 :(得分:0)

您在询问以下两个查询之间的区别:

SELECT post_id, COUNT(user_id)
FROM like
GROUP BY post_id;

SELECT post_id, like_count
FROM post;

假设每次在like_count表中创建一行时,您都在递增like

另请注意,连接不是获取计数所必需的,因为您可以仅通过对like表执行GROUP BY来获取它。

它是一种常见的非规范化形式,用于计算聚合(如计数)并存储它。

严格地说,这是冗余信息,这会产生数据异常的可能性。您的代码有时可能无法更新like_count,然后计数将不准确。

如果您愿意接受此风险,那么您可以避免在每次需要计数时进行汇总查询。