やりたいこと
数十万件のレコードがあるテーブルからレコードを取得して一覧画面に表示したい。
一覧画面は各ページで100件ずつレコードを表示したい。
やったらダメなこと
一度にテーブルの全てのレコードを取得すること。
以下は約5万件のレコードのあるテーブルに対して実行。
# usersテーブルから全てのレコードを取得してページごとに100件ずつ配列にする
@users = Kaminari.paginate_array(User.all).page(params[:page]).per(100)
User Load (64.2ms) SELECT `users`.* FROM `users`
Completed 200 OK in 11382ms (Views: 613.2ms | ActiveRecord: 80.2ms)
できたこと
ページごとに表示する分だけのレコードを取得する。
上記と同じく、以下は約5万件のレコードのあるテーブルに対して実行。
@users = User.page(params[:page])
User Load (0.5ms) SELECT `users`.* FROM `users` LIMIT 100 OFFSET 0
Completed 200 OK in 807ms (Views: 622.8ms | ActiveRecord: 27.2ms)
取得にかかる時間には雲泥の差があった。
参考