1

我在一个评论应用程序中工作,我想要一些关于我用来跟踪评论的回复或喜欢数量的方法的反馈。评论和回复存储在同一个表中,为了确定评论是否是回复,如果评论不是回复,我使用该parent_id字段0

请注意,我不会包括下表的所有列:

 cid | parent_id | replies | likes 
-----+-----------+---------+-------
  2  |     0     |    3    |   0   
  3  |     2     |    0    |   0   
  4  |     2     |    0    |   2   
  5  |     2     |    0    |   0   

在上表中,带有 id (cid)[3,4,5]的评论是对评论的回复#2。列replieslikes是整数,相应地保存回复和喜欢的计数。这些列的完整性和准确性通过 PHP 代码进行维护和更新,例如,如果#2添加了另一个评论回复,则回复列将增加一或如果删除则减少一。

我也知道我可以动态计算获取评论的 SQL 查询中的回复计数,但我认为这会给 SQL 服务器增加更多压力。这个查询看起来像这样:

SELECT cid, parent_id, (
    SELECT count(*)
    FROM comments as SC
    WHERE RC.parent_id = C.cid
    ) AS replies
FROM comments AS C
WHERE thread = {thread_id}

通过将回复和喜欢存储在表格的实际列中,我做得对吗?或者我是否夸大了上述查询在 MySql 服务器中的压力,而我应该使用这种复杂的查询?

任何反馈将不胜感激,谢谢

4

1 回答 1

1

我认为您不需要名为“回复”的专栏。只是占用额外的不需要的空间。对 cid 和 parentId 进行组合索引。那应该足够好了。查询应该很快。通过拥有该专栏,您给应用程序代码和 mysql 增加了更多压力。(用于维护完整性的应用程序代码和 mysql coz 2 写入代替 1 写入 - 当输入评论时)。

但是如果你在谈论数百万行,它不会选择mysql,而是mongo,数据可以构造成漂亮的JSON并转储到mongo中。

于 2012-12-16T03:50:00.787 回答