ruby-on-rails – 查找更快的ActiveRecord查询(Ruby on Rails)

ruby-on-rails – 查找更快的ActiveRecord查询(Ruby on Rails),第1张

概述我有一个按特定顺序排序的模型.我的目标是从模型中找到一条记录,其中所有先前记录的特定列的总和等于某个数字. 下面的例子告诉我我需要的东西,但它非常慢,特别是对于一个相当大的表.有没有更快的方法来解决product.id所有以前产品的积分总和= 100000? total_points = 0 find_point_level = 100000 @products = Product.order 我有一个按特定顺序排序的模型.我的目标是从模型中找到一条记录,其中所有先前记录的特定列的总和等于某个数字.
下面的例子告诉我我需要的东西,但它非常慢,特别是对于一个相当大的表.有没有更快的方法来解决product.ID所有以前产品的积分总和= 100000?

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

解决方法 您可以尝试对数据库进行非规范化,并将部分和直接保存在products表中.简单查询where和limit会立即为您返回正确的答案.

您需要创建额外的过滤器,在添加产品时更新单个记录,并在产品被删除或更改点数字段时更新所有产品.

总结

以上是内存溢出为你收集整理的ruby-on-rails – 查找更快的ActiveRecord查询(Ruby on Rails)全部内容,希望文章能够帮你解决ruby-on-rails – 查找更快的ActiveRecord查询(Ruby on Rails)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存