gpt4 book ai didi

mysql - 存储数据库记录的数量是多余的吗?

转载 作者:可可西里 更新时间:2023-11-01 06:52:59 24 4
gpt4 key购买 nike

我正在使用 Rails 和 MySQL,并且有一个基于行计数的效率问题。

我有一个 Project 模型,它 has_many :donations

我想计算一个项目的唯一捐助者的数量。

projects 表中有一个名为 num_donors 的字段,并在创建新捐助者时递增它是个好主意吗?

或者像 @num_donors = Donor.count(:select => 'DISTINCT user_id') 这样的东西会由于数据库优化而在效率方面相似或相同吗?这是否需要我为 user_id 和我想计算的任何其他字段创建索引?

对于捐赠总额的总和,同样的答案是否成立?

最佳答案

回答标题问题。是的,这是多余的,但是否应该这样做取决于您的情况。

除非您有已知的性能问题,否则请在您的应用程序中即时计算计数和总数并且不要存储它们。也就是说,除非别无选择,否则不要存储计算值。

在大多数情况下,您不必也不应该求助于此。

如果您必须存储计算值,请执行以下操作:

  • 不要通过增加它来保持最新。每次更新时,根据所有数据重新计算计数/总数。
  • 如果您没有很多更新,将代码放在更新触发器中保持计数/总数是最新的。
  • 冗余的麻烦数据库是当数字不同意,你不确定哪个是权威性。添加到文档说明来源数据是权威来源,如果他们不同意并且可以被覆盖。

关于mysql - 存储数据库记录的数量是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com