0

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
  • レコードを検索してカウントするよりも、カウンター用に別のデータベースを用意する方がよいでしょうか?
  • どのデータベース構造を推奨/アドバイスしますか?
4

3 に答える 3

2

personsActiverecord関係であると仮定

persons.joins(:payments).sum(:value)

すでに配列である場合persons(あまり優先されません)

Payment.where(:person_id => persons.map(&:id)).sum(:value)

このビューで関連付けられた支払いから合計支払いが唯一の属性である必要がある場合。次に、最も速い方法は、テーブルtotal_paymentsにフィールドを作成することです。person関連付けが行われるたびに更新しますpayment。カウンターキャッシュに似たもの。そうすれば、支払いのために SQL クエリを作成する必要はまったくありません。

于 2013-09-23T04:06:56.243 に答える
0

基本クエリとして Payment.select('value') のようなことを試して、代わりに1つのクエリとマッピングのみを実行するようにすることができます。

于 2013-09-23T03:37:42.983 に答える