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)

    参考


    関連書籍