【发布时间】:2011-11-06 11:18:35
【问题描述】:
我似乎找不到太多关于此的信息。
我有一个记录用户 cmets 的表。我有另一个表来记录其他用户对每条评论的喜欢/不喜欢。 Therefore, when selecting this data to be displayed on a web page, there is a complex query requiring joins and subqueries to count all likes / dislikes. 我的示例是有人在此处帮助我实现所需结果的查询:
SELECT comments.comment_id, comments.descr, comments.created, usrs.usr_name,
(SELECT COUNT(*) FROM comment_likers WHERE comment_id=comments.comment_id AND liker=1)likes,
(SELECT COUNT(*) FROM comment_likers WHERE comment_id=comments.comment_id AND liker=0)dislikes,
comment_likers.liker
FROM comments
INNER JOIN usrs ON ( comments.usr_id = usrs.usr_id )
LEFT JOIN comment_likers ON ( comments.comment_id = comment_likers.comment_id
AND comment_likers.usr_id = $usrID )
WHERE comments.topic_id=$tpcID
ORDER BY comments.created DESC;
但是,如果我在 COMMENTS 表中添加了一个喜欢和不喜欢的列,并创建了一个触发器来在喜欢插入/删除/更新到 LIKER 表时自动递增/递减这些列,那么 SELECT 语句会更简单而且更多比现在高效。我在问,使用 COUNTS 进行这个复杂的查询还是使用额外的列和触发器更有效?
概括地说,在定期查询时使用 COUNT 还是增加一列用于计数更有效?
【问题讨论】:
-
请查看建议的副本。非常相似的问题 - 存储聚合而不是在每个页面视图上重新计算它们要高效得多。
-
是的,感谢您提供链接,这是我能够阅读的有关此事的第一个真实信息。
-
虽然,发现了另一个类似的问题,看来count可能不是什么坏事……stackoverflow.com/questions/4638153/…
标签: sql performance count