アウトプットの部屋

エンジニアになるためのアウトプット

N+1問題とは??

userは複数のpostsをもつ 「user has_many posts」などの関係で、postsを取得する際にpostsの数だけSQLクエリが発行されること。

対策

includesを使う!

モデル名.includes(:関連名)

*関連名はテーブル名ではない

例えば上記の例では

@posts = Post.all.includes(:user)

となる。

n:1:nの場合

userがcommentを持っている時

user has_many posts user has_many comments

comment belongs_to user

@posts = Post.all.includes(user: :comments)

となる。

ちなみにbulletというgemを使うことで開発時に自動でN+1を検知してくれる!