要旨
find_each
を使おう。 batch_size
を指定すれば、一度に取得するレコード数を制限できる。
Model.find_each(batch_size: 100) do |model| ~~~ end
詳細
#all
は、一度に全てのレコードを取得するので、まずデータベースに負荷がかかってしまう。さらにその結果を全てメモリ上に展開するので、Railsにも負荷がかかってしまう。
find_each
を使えば、一度に取得してくるバッチサイズを指定することで、大量のレコードを取得してしまうことを防げる。