特定の順序でソートされたモデルがあります。私の目標は、以前のすべてのレコードの特定の列の合計が特定の数に等しいモデルからレコードを見つけることです。次の例では、必要なものが得られますが、特にテーブルがかなり大きい場合は非常に遅くなります。以前のすべての製品のポイントの合計 = 100000 である product.id を解決するより速い方法はありますか?
total_points = 0
find_point_level = 100000
@products = Product.order("id").all
@products.each do |product|
total_points = product.points + total_points
@find_product = product.id
break if total_points >= find_point_level
end
アップデート
以下に、いくつかの解決策を示します。これは約60,000件のレコードを通過しています。時間は ActiveRecord のものです。
元の例 (上):
2685.0ms
1238.8ms
1428.0ms
find_each を使用した元の例:
799.6ms
799.4ms
797.8ms
合計で新しい列を作成します:
181.3ms
170.7ms
172.2ms