SQL ページ制御のパフォーマンスについて考える
ページ制御のあるテーブルを表示する画面でレスポンスが悪いと感じたとき、以下のポイントを確認します。
ページ制御とSQL
についてはページ制御時の1ページあたりのレコードを取得するSQL文の雛形で詳しく紹介しています。
(以下1ページあたりの表示件数を50件と定義しているとします)
表示順と件数に影響しない項目は1ページ分のデータ取得後に取得する
例えばコードに紐づく名称を取得するために別のテーブルを外部結合する場合、取得する名称が表示順や件数に影響しないのなら、50件取得したあとに名称を取得したほうがパフォーマンスが良い場合が多いです。
メインのテーブルが100万件ある場合、そのテーブルに対して外部結合をするよりも50件に対して外部結合をしたほうが効率的です。
50件を取得するSQL
と50件に紐づくデータを取得するSQL
を分けて2回実行するのも1つの手です。
注意点
ただし、その名称が検索条件によって絞り込まれる場合や、表示順に影響する場合(名称でソートされる場合)は50件を取得するSQL
のタイミングで取得する必要があります。
その名称がわからなければ50件を正しく取得できないためです。
表形式で一覧表示する画面で、ヘッダクリックでソートをしたい場合、ソートする列の値は50件取得するSQL
で必要になるので、レスポンスが気になる場合はその列のみソート対象から外すなどの仕様検討も必要になってきます。