作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的系统中,有实体(帖子)和评论。
假设有两个表:“评论”表和“实体”表
Comments 表有一个引用实体的外键,称为 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”列,这样我就可以轻松获得评论计数而无需连接,每次更改时更新它们。
我想知道这样做是否正确(或有效)。
如果有更好的解决方案,请告诉我。
最佳答案
这是一个困惑的局面。 LEFT
是必需的,因为评论可能为零。但是 LEFT
可能优化不好。试试这个:
SELECT e.*,
( SELECT COUNT(*)
FROM comments
WHERE entity_id = e.id
) AS comment_count
FROM entities e
并确保在评论
上有INDEX(entity_id)
,
关于mysql - 在评论系统中做一个 'count'栏是不是一个好办法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079354/
我是一名优秀的程序员,十分优秀!