繁体   English   中英

查询记录的最佳方式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM