N+1問題とは

データベース

N+1

概要

N+1問題の説明と対応についてまとめる。

N+1問題とは

  • 全てのレコードの取得に1個+レコード文だけのN個のSQLを発行してしまう問題
  • N+1というより1+Nと解釈したほうがわかりやすい

  • 一覧表示用のデータを取得するケース
    • 一覧用の全データを取得するSELECTを1回発行(Nレコード返ってくる)
    • Nレコードの関連データ取得のためにSELECTをN回発行

対応

  • join
    • SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE "posts"."id" = 1"
    • Eager Loading
      • SELECT "users".* FROM "users"
      • SELECT "posts".* FROM "posts" WHERE "posts"."id" IN (1, 2, 3, 4, 5)

参考

関連書籍