Mysql 查询记录的最佳方式
我的rails应用程序的性能有问题。这可能是由于糟糕的数据库结构造成的。考虑到记录为5k+,该页面经常被用户查看Mysql 查询记录的最佳方式,mysql,sql,ruby-on-rails,ruby-on-rails-3,Mysql,Sql,Ruby On Rails,Ruby On Rails 3,我的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 为计数器建立一个单独
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
- 为计数器建立一个单独的数据库是否比通过记录进行搜索和计数更好
- 您推荐/建议什么样的数据库结构
@total\u payments+=p.payments.pull(:value).sum
这将仅从每次付款中选择值
,而不是表中的所有字段。您的表是否在付款
表中的人员id
上建立索引?这也将有助于加快数据库的速度
(在移动atm上,因此无法深入了解)假设
人员
是活动记录关系
persons.joins(:payments).sum(:value)
如果persons
已经是一个数组(不太首选)
如果total payment是此视图中关联付款的唯一属性,则需要。然后最快的方法是在
person
表中设置total\u payments
字段。每当进行相关的付款时更新它。类似于计数器缓存的东西。那么您就根本不需要对付款进行sql查询。什么是人。每个人都是?我想应该是人。每个人都是?此外,这是payments controller?请尝试在数据库中使用迷你探查器
,查看事物如何访问数据库。您还可以对支付金额执行Rails.cache.fetch
和memcache
或dahli | memcache
操作。这将增加您的记忆,但提供更快的体验。谢谢。我将尝试mini profiler,然后执行memcache
Payment.where(:person_id => persons.map(&:id)).sum(:value)