[英]Best way to Query Records
我的rails应用程序性能有问题。 这可能是数据库结构不佳的结果。 考虑到记录是5k +,用户经常查看该页面。
Current System:
Model:
person has_many payment
Controller:
@total_payments = 0
person.each do |p|
@total_payments += p.payments.map(&:value).sum
end
View:
@total_payments
假设persons
是Activerecord关系
persons.joins(:payments).sum(:value)
如果persons
已经是阵列(不太喜欢)
Payment.where(:person_id => persons.map(&:id)).sum(:value)
如果总付款是此视图中关联付款所需的唯一属性。 那么最快的方法是将total_payments
作为person
表中的字段。 每当进行相关payment
时更新它。 类似于计数器缓存的东西。 然后你根本不需要对付款进行sql查询。
您可以尝试使用Payment.select('value')之类的内容作为基本查询,这样您只需执行一个查询并在其上进行映射。
你能试试吗?
@total_payments += p.payments.pluck(:value).sum
这只会选择每笔付款的value
,而不是表格中的所有字段。 您的表是否在Payment
表中的person_id
上编入索引? 这也有助于加快数据库的速度。
(在移动设备上,因此无法深入了解)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.