哪种是最佳做法?
场景:如果我有2个表,一个称为topics
,另一个称为posts
,每个帖子属于特定的topic_id
。
最好在名为topics
的{{1}}表中添加一个列,只要在post_count
下创建/删除帖子,我就会更新。
或者最好使用SELECT COUNT查询计算topic_id
匹配的行数吗?
效率是否有任何缺点或差异?
答案 0 :(得分:3)
在列上存储post_count
是denormalisation。
查找单个字段的读取性能比执行SELECT COUNT
要快,但大多数人会同意这是一个过早的优化,它引入了更新异常的可能性。数据库应存储规范化(即非冗余)数据,除非您有基准指示这是您应用程序中的性能瓶颈。
通过查看数据库和应用程序之间的缓存层可能会更好地服务,这样每次查询数据库时都不会执行计数,但是当posts
的内容发生更改时,计数会更新 - 你甚至可能发现MySQL是already caching the result。