我有这个数据库,有一个名为“徽章”和“主题”的表,我在“主题”中有一个标记字段,名为“is_canceled”bool值,现在由于某种原因有人建议我在“徽章”中有一个字段“called”canceled_subject_count“,其值与
相同"SELECT SUM(is_canceled) as cancel_count FROM subjects WHERE is_canceled = 1 AND badge_id = ".$some_badge_id
他说的是表现的原因之一,最好是直接取值而不是首先求和
你觉得怎么样?我应该有这个领域吗?为什么?谢谢
答案 0 :(得分:5)
这称为denormalization。为初始数据库设计执行此操作可能会以后节省您的时间和精力,但可能是过早优化。您可能最好不添加canceled_subject_count
字段,如果经过一些分析后,您在计算徽章的已取消主题时会发现测量的性能瓶颈,那么您可以添加该字段。 / p>
答案 1 :(得分:0)
这实际上取决于软件的使用。这种优化很大程度上取决于价值变化的频率,观看者的数量等等。
如果它很少改变,存储值并在发生更改时更新可能更聪明。
如果总和不断变化,那么每次查询计算它都会更聪明。
但除非你服务于大量的请求,否则这笔费用几乎不会花费你任何费用,而且可能更容易保持你的数据完整性。