在我的系统中,有实体(帖子)和评论。
假设有两个表:'comments'表和'entities'表
注释表有一个引用名为entity_id的实体的外键
有一件事我担心,也就是说,我经常需要与实体一起获得评论,我使用LEFT JOIN来获取评论数。
SELECT entities.*, comment_count FROM entities LEFT JOIN
(SELECT entity_id,count(id) AS comment_count FROM comments GROUP BY entity_id)
AS entity_comment ON entity_comment.entity_id = entities.id
但每次使用LEFT JOIN和COUNT感觉有点像浪费服务器资源和代码量,
所以我试图在实体表中添加一个'comment_count'列,这样我就可以轻松获得注释计数而无需连接,每次更改时都会更新它们。
我想知道这样做是否正确(或有效)。
如果有更好的解决方案,请告诉我。
我想从数据库设计角度解释有关comment_count
列。使用计数列与您的项目条件相关:
Comment
表中的记录数量如此之多。Entities
表中的选择数量如此之多。最好使用comment_count
色谱柱。
但是,我不建议在comment_count
中使用Entities
色谱柱。 comment_count
的变化数量如此之多。但是,Entities
的变化数量很少。
在这种情况下,最好将更多可更改的列移动到另一个表。让它命名为:Entities_Statistics
并有一个Entities_ID
作为F.K.您可以将所有统计信息(例如评论数量,观看次数等)放入其中。
因此,您可以从这个新表中获取统计信息,而不使用像count(*)
这样的聚合函数。
这是一个混乱的情况。 LEFT
是必需的,因为可能没有评论。但LEFT
可能不会很好地优化。试试这个:
SELECT e.*,
( SELECT COUNT(*)
FROM comments
WHERE entity_id = e.id
) AS comment_count
FROM entities e
并确保在INDEX(entity_id)
上有comments
,