問題一覧に戻る
中級高度なデータベース
問題44: N+1問題 - includesで解決

RailsでN+1クエリ問題を特定して解決する方法を学習します。この一般的なパフォーマンス問題は、コレクションを読み込んでから各アイテムの関連にアクセスするときに発生し、コレクション用に1つ、関連用にN個のクエリが実行されます。includesを使うとeager loadingでこれを防げます。

# これはN+1クエリを引き起こします
posts = Post.all
posts.each { |post| puts post.author.name }

# 著者をeager load
posts = Post.(:author)
posts.each { |post| puts post.author.name }

# 複数の関連をインクルード
Post.includes(:, :tags)

# ネストした関連をインクルード
Post.( => :user)