我有巨大的数据库表,我需要在这里做点什么,但我该怎么做呢?如果我写:
@person = Person.all
@person.each do |p|
//something
end
它的负载,负载系统,并需要时间。有什么方法可以通过不将所有数据加载到某个变量来迭代表?
我有巨大的数据库表,我需要在这里做点什么,但我该怎么做呢?如果我写:
@person = Person.all
@person.each do |p|
//something
end
它的负载,负载系统,并需要时间。有什么方法可以通过不将所有数据加载到某个变量来迭代表?
这是一个使用find_in_batches
or的用例find_each
。
这将逐块加载数据,请参阅 doc。
这个问题的最佳起点可能是Rails Guide 条目 Active Record Query Interface。
本质上,就内置方法而言,您可以在 和 之间进行find_each
选择find_in_batches
。前者的使用方式与 find 相同(意味着每次迭代都会为您提供一条记录)。后者为您提供批次数组。