【えぬぷらすわんもんだい】
N+1問題 とは?
💡 「1回で済むはずのクエリがN回余計に走る」パフォーマンス問題
📌 このページのポイント
- 一覧取得の1回 + 各行の関連データ取得N回 = N+1回のクエリが発行される
- ORMの遅延ロード(Lazy Loading)が原因で無意識に発生しやすい
- Eager Loading(事前一括読み込み)やJOINで解決できる
- データ量が少ないと気づきにくく、本番で問題化することが多い
N+1問題って具体的にどういう状態?
なんでこんなことが起きるの?
どうやって解決するの?
Eager Loadingにしておけば万事解決?
📖 おまけ:英語の意味
「N+1 Problem」 = N+1回の問題
💬 1回の一覧取得 + N件分の追加クエリで「N+1」。本来1〜2回で済むはずなのにN+1回走るという意味