我有一个模型Transaction,我需要显示transactions的一个子集的许多字段上的许多计算结果。
我见过两种方法,但不确定哪种是最好的。我追求的是在数据集增长和并发用户数量增加时对性能影响最小的一个。

data[:total_before] = Transaction.where(xxx).sum(:amount_before)
data[:total_after] = Transaction.where(xxx).sum(:amount_after)
...


transactions = Transaction.where(xxx)
data[:total_before]= transactions.inject(0) {|s, e| s + e.amount_before }
data[:total_after]= transactions.inject(0) {|s, e| s + e.amount_after }
...

编辑:where子句总是相同的。
我该选哪一个?(或者有第三种更好的方法吗?)
谢谢,P.

最佳答案

不是唠叨,而是

transactions = Transaction.where(xxx)
data[:total_before] = transactions.sum(:amount_before)
data[:total_after] = transactions.sum(:amount_before)

?这看起来像是方法1和方法2的优点的结合:)您可以重用搜索结果,并使用更干净的rails特定的sum聚合器。
ps如果你问是否可以依赖rails来缓存Transaction.where(xxx)查询的结果,我不知道。当我不知道的时候,我更喜欢安全。

关于ruby-on-rails - 对同一组数据进行多次计算:ruby还是数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4531155/

10-09 08:50