zukucode
主にWEB関連の情報を技術メモとして発信しています。

SQL ページ制御のパフォーマンスについて考える

ページ制御のあるテーブルを表示する画面でレスポンスが悪いと感じたとき、以下のポイントを確認します。

ページ制御とSQLについてはページ制御時の1ページあたりのレコードを取得するSQL文の雛形で詳しく紹介しています。

(以下1ページあたりの表示件数を50件と定義しているとします)

表示順と件数に影響しない項目は1ページ分のデータ取得後に取得する

例えばコードに紐づく名称を取得するために別のテーブルを外部結合する場合、取得する名称が表示順や件数に影響しないのなら、50件取得したあとに名称を取得したほうがパフォーマンスが良い場合が多いです。

メインのテーブルが100万件ある場合、そのテーブルに対して外部結合をするよりも50件に対して外部結合をしたほうが効率的です。

50件を取得するSQLと50件に紐づくデータを取得するSQLを分けて2回実行するのも1つの手です。

注意点

ただし、その名称が検索条件によって絞り込まれる場合や、表示順に影響する場合(名称でソートされる場合)は50件を取得するSQLのタイミングで取得する必要があります。

その名称がわからなければ50件を正しく取得できないためです。

表形式で一覧表示する画面で、ヘッダクリックでソートをしたい場合、ソートする列の値は50件取得するSQLで必要になるので、レスポンスが気になる場合はその列のみソート対象から外すなどの仕様検討も必要になってきます。


関連記事