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.

N+1問題について

Last updated at Posted at 2021-02-03

N+1問題とは

アソシエーションを利用した場合にDBへのアクセスが多くなってしまう問題のことです。
対策をしていないとアプリケーションのパフォーマンスの低下に繋がってしまいます。

例)

users テーブル

Column Type Options
nickname string null: false
Associations
has_many :tweets

tweets テーブル

Column Type Options
comment string null: false
user_id integer
Associations
belongs_to :user

ツイートが複数存在する一覧画面に、それぞれユーザー名を表示する場合、tweetsに関連するusersの情報の取得に、ツイート数と同じ回数のアクセスが必要になります。(投稿が1万ある場合は1万回以上DBにアクセスすることになります。)

includeメソッドを使用する

includeメソッドを使用することで引数に指定された関連するモデルを一度のアクセスで取得することができます

#モデル名.includes(:紐づくモデル名)
Tweet.includes(:user)

引数に関連するモデルをシンボル型で記入します。
このように記述することで、
1:tweetsのすべてのデータを取得する
2:tweetsテーブルに紐づくusersテーブルのデータを取得

2度のアクセスだけて情報を取得することができます。

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?