Closed1
N+1 クエリ問題とは?

💡 N+1 クエリ問題とは?
N+1クエリ問題とは、あるデータを取得するときに「無駄なSQLがたくさん発行される」問題 のこと。
例:N+1クエリが発生するコード
books = Book.all # ここで全てのBookを取得(1クエリ)
books.each do |book|
puts book.author.name # ここで author を取得するごとに1クエリ発行(Nクエリ)
end
これだと
-
SELECT * FROM books;
(1回目のクエリ) -
SELECT * FROM authors WHERE id = ?;
(Bookの数だけ発生 = N回のクエリ)
結果的に 1 + N
クエリが発生してしまう。
includes
を使う
解決策:books = Book.includes(:author) # 事前に author もまとめて取得(1回のクエリ)
books.each do |book|
puts book.author.name # 追加のクエリは発生しない
end
このスクラップは2日前にクローズされました