私は巨大なデータベーステーブルを持っています、そして私はここで何かをする必要があります、しかし私はこれをどのように行うことができますか?私が書いた場合:
@person = Person.all
@person.each do |p|
//something
end
それはロードであり、システムをロードし、そして時間がかかりました。すべてのデータをいくつかの変数にロードしないことによってテーブルを反復処理する方法はありますか?
私は巨大なデータベーステーブルを持っています、そして私はここで何かをする必要があります、しかし私はこれをどのように行うことができますか?私が書いた場合:
@person = Person.all
@person.each do |p|
//something
end
それはロードであり、システムをロードし、そして時間がかかりました。すべてのデータをいくつかの変数にロードしないことによってテーブルを反復処理する方法はありますか?
find_in_batches
これは、またはを使用するユースケースfind_each
です。
これにより、データがチャンクごとに読み込まれます。ドキュメントを参照してください。
この質問の最良の出発点は、おそらくRailsガイドのエントリActive RecordQueryInterfaceです。
基本的に、組み込みメソッドに関する限り、との間find_each
で選択できますfind_in_batches
。前者はfindと同じように使用されます(つまり、反復ごとに1つのレコードが得られます)。後者は、バッチの配列を提供します。