0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

大量のレコードがある場合の一覧画面用のデータ取得方法

Last updated at Posted at 2021-04-01

やりたいこと

 数十万件のレコードがあるテーブルからレコードを取得して一覧画面に表示したい。
 一覧画面は各ページで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)

 取得にかかる時間には雲泥の差があった。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?