我正在开发一个Rails应用程序,需要显示所有项以及这些项的总值。目前,在我的ItemsController#index
中,我检索了所有具有@items = current_user.items
的项目,并希望计算总值。
我考虑了两种方法:
1.使用类似@total_value = @items.sum(:value)
的查询
1.在Ruby中使用@total_value = @items.sum(&:value)
计算总和
我想了解这些方法在性能和效率方面的优缺点。
是使用额外的查询来求和值更好,还是在Ruby中计算总和更好?
是否有任何最佳实践或替代解决方案来优化此流程?
我会很感激任何答案。谢谢!
1条答案
按热度按时间bq3bfh9z1#
欢迎来到SO!
我认为,考虑到你问的问题,你应该后退一步。
@items = current_user.items
在查询数据库后将所有item
记录加载到内存中。一旦它们都在内存中,您正在考虑两个非常相似的选项:重新查询或循环。
这两个选项在大O符号方面本质上是相同的。您已经获取了所有记录,现在您希望对所有记录执行操作。
如果你只需要从
@items
得到value
的和,你最好的方法是只得到它:current_user.items.sum(:value)
是一个SQL调用:就这两种选择而言,起作用的因素是:
SUM
与Ruby在#sum
上有多快。SUM
带来的速度提升#sum
(以及以后的垃圾收集)产生影响