gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:14 26 4
gpt4 key购买 nike

我有一个按特定顺序排序的模型。我的目标是从模型中找到一条记录,其中所有先前记录的特定列的总和等于某个数字。下面的例子得到了我需要的东西,但速度很慢,尤其是对于一个相当大的表。有没有更快的方法来解决 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.0毫秒
1238.8毫秒
1428.0毫秒

使用 find_each 的原始示例:
799.6毫秒
799.4毫秒
797.8 毫秒

用总和创建一个新列:
181.3毫秒
170.7毫秒
172.2毫秒

最佳答案

您可以尝试对数据库进行反规范化,并将部分总和直接保存在 products 表中。使用 wherelimit 的简单查询将立即返回正确的答案。

您需要创建额外的过滤器,它会在添加产品时更新单个记录,并且在产品被删除或它的 points 字段发生更改时更新所有产品。

关于ruby-on-rails - 寻找更快的 ActiveRecord 查询 (Ruby on Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com