N+1問題とは

サムネイル画像 用語

N+1問題とは

10件の商品を一覧表示するWebページがあるという前提で

  1. 10件の一覧情報を取得(DBへのselectが1回実行される)
  2. 各商品の詳細情報を1件ずつ取得(DBへのselectが10回実行される)
  3. 1と2の情報を合わせて画面を表示

という実装がされていたとする。

このとき、「最初の手順で情報全部取ってきた方が効率的じゃない?」というのがN+1問題である。

10件というのは単なる例で、
N件だった場合、合計でN+1回のselectが発行されることからこの名前がついている。

解決策

一般的には1の手順でテーブルをjoinして、一括で情報を取得すると速度が向上する。

もしくは、詳細情報を別ページやモーダル表示にして「必要になったら改めて取得する」方法にすると良い。

補足

よくありがちなパフォーマンス問題の一種。

データの取得元がAPIで、「一覧取得API」と「詳細取得API」のように分かれている場合も
同じ現象に遭遇しやすい。

テスト時の少ないデータではパフォーマンスの遅さに気づきにくいのも特徴。

タイトルとURLをコピーしました