LoginSignup
6
5

More than 5 years have passed since last update.

チューニング: ページャ付のWEBページを高速化する

Last updated at Posted at 2016-11-29

ページャ付のWEBページで発行しているSQLは、書き換えるだけで劇的に高速化できる可能性があります。
図1.png

大幅に高速化できる可能性があるケース

ページャ付のWEBページでは、「検索条件に当てはまるレコード全体のうち、表示するレコードは一部分だけ」という性質があります。

このとき、クエリが遅くなる典型的なパターンとして、「DB側でレコード全件取得→プログラム側で現在のページに対応するレコードだけを使用して結果表示」という作り方をしている場合があります。
この場合は無駄にレコードを大量取得してしまっているので、読み取り数も実行時間も大きくなりがちです。

クエリの書き換えだけで大幅に速度改善できる可能性があります。

チューニング方法

■ 改善前
「DB側でレコード全件取得→プログラム側で現在のページに対応するレコードだけを使用して結果表示」

    -- SQLイメージ
    SELECT *
    FROM SomeTable
    WHERE
        SomeCondition = 1
    And SomeFlag = 0
    And ....
    ORDER BY SomeDateTime DESC

■ 改善後
「ROW_NUMBER()を使って最小限のデータをDB側で取得→プログラム側で取得レコードを使用して結果表示」
※検証環境はSQLServerです。ROW_NUMBER()が使えない製品もあるようですね。。

    -- SQLイメージ
    SELECT *
    FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY SomeDateTime DESC) AS rownumber
        , *
        FROM SomeTable
        WHERE
            SomeCondition = 1
        And SomeFlag = 0
        And ...
    ) AS A
    WHERE rownumber BETWEEN 1 AND 100 -- 2ページ目なら 101 AND 200 みたいな感じで、ページ番号ごとにここが変わる。この例だと、1ページあたりの表示件数は100件
    ORDER BY SomeDateTime DESC

以上、ページャ使用WEBページでのチューニング例でした。改善前の取得レコード数が多ければ多いほど効果も期待できます。(もちろんWEBページ以外でも適用できます)

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5