Mysql 具有列';喜欢的数量';或者有一个单独的专栏。。。?

Mysql 具有列';喜欢的数量';或者有一个单独的专栏。。。?,mysql,select,join,normalization,Mysql,Select,Join,Normalization,在我的项目中,我需要*计算特定评论的“喜欢的数量*” 目前我的评论表的结构如下: id user_id comment_details 1 10 Test1 2 5 Test2 3 7 Test3 4 8 Test4 5 3 Test5 我还有另一个表“comment_likes_tbl”,其结构如下: id comment_id user_id 1

在我的项目中,我需要*计算特定评论的“喜欢的数量*”

目前我的评论表的结构如下:

id    user_id   comment_details
1     10        Test1
2     5         Test2
3     7         Test3
4     8         Test4
5     3         Test5
我还有另一个表“comment_likes_tbl”,其结构如下:

 id    comment_id   user_id
  1       1         1
  2       2         5
  3       2         7
  4       1         3
  5       3         5
以上是样本数据

问题: 在我的实时服务器上,大约有5万条记录。我通过将上面两个表连接起来,计算出一个特定的评论所喜欢的*numberofu。 我想知道这样行吗

或者我应该在comment_tbl表中增加一个字段,记录喜欢的数量,每次喜欢时增加1,并将其插入comment_likes_tbl

这对我有帮助吗


提前感谢。…

是的,您应该在
注释tbl
表中再添加一个字段
喜欢的数量
。这将减少不必要的表连接

这样你就不需要加入,直到你需要得到谁喜欢的评论


这里可以看到的一个很好的例子是StackOverflow本身的数据库设计。
用户
表他们在
用户
表中有一个字段
声誉
。不要每次使用这个查询时都加入并计算用户的声誉。

使用查询-因为它们是外键,列将被索引,查询将很快。

是的,您的体系结构是很好的,我暂时会坚持

运行太多的联接可能会影响性能,但只要您不必面对此类问题,就不应该在意

即使您会遇到性能问题,您也应该首先

  • 检查是否使用(外键),以便MySQL可以非常快速地查找数据
  • 利用MySQL查询缓存
  • 使用第二个缓存层,比如memcached来存储likes的值(因为这只是一个增量值)

使用memcache可以解决运行过多联接的问题,并避免创建不必要的列。

您可以采取一些不同的方法来实现这一点

  • 正如您目前所做的那样,运行一个连接查询以返回注释的整理结果以及每个注释有多少个“喜欢”
  • 随着时间的推移,您可能会发现这会消耗性能。相反,您可以简单地在每个注释字段上附加一个递增的计数器。但是,您可能会发现保留*comment\u likes\u tbl*表也很有用,因为这将是谁喜欢什么、什么时候喜欢什么的永久记录(否则,您只需要一个数字,没有附加额外的元数据)
  • 您还可能有一个解决方案,您只需将用户的喜好存储在注释\u likes\u tbl中,然后根据预先确定的时间表运行cron任务,自动更新所有“like”计数。再往下看,对于更繁忙的站点,这可能有助于平衡性能,即使这确实意味着“喜欢”计数稍微落后于实际计数
  • (除此之外,您还可以实现缓存解决方案等,以存储附加到注释的类似值的临时记录,而且MySQL具有有用的缓存技术,您可以使用)

    但您刚才所做的是绝对正确的,尽管您仍然应该确保正确设置了索引,否则您会更快地发现性能下降。(注释_id上的非唯一索引应足够)