ホームページ >データベース >mysql チュートリアル >キーセットのページネーションにより、OFFSET よりも SQL Server のページネーションの効率がどのように向上しますか?

キーセットのページネーションにより、OFFSET よりも SQL Server のページネーションの効率がどのように向上しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-16 10:52:01754ブラウズ

How Can Keyset Pagination Improve SQL Server Pagination Efficiency Over OFFSET?

SQL Server のページネーション: キーセットのページネーションと OFFSET

SQL Server でのページ分割に OFFSET を使用すると、大規模なデータセットでは非効率になる可能性があります。 キーセットのページネーションは、優れた代替手段を提供します。

キーセットのページネーションについて

行セットのページネーション (先行するすべての行をスキャンする) とは異なり、キーセットのページネーションでは、一意のインデックスを使用してページの開始点に直接アクセスします。これにより、不必要なデータの取得が大幅に削減されます。 ページネーション キー (および追加のクエリ列) の一意のインデックスは、最適なパフォーマンスを実現するために重要です。

キーセットのページネーションの利点

  • 効率の向上: キーセットのページネーションにより、無関係な行のスキャンによるオーバーヘッドが回避され、効率が大幅に向上します。
  • 「行欠落」エラーの排除: 以前に取得したページから行が削除されている場合、行セットのページネーションにより「行欠落」問題が発生する可能性があります。キーセットのページネーションでは、キーの一貫性が保たれるため、これを回避できます。
  • ページ番号の制限: 行セットのページネーションとは異なり、キーセットのページネーションではページ番号に直接アクセスできません。 代わりに、インデックス キーを使用して移動します。

実装例

TableName にインデックスを持つ Id という名前のテーブルがあり、最新の Id 値を使用してページネーションする必要があるとします。

最初のクエリ (最初のページ):

<code class="language-sql">SELECT TOP (@numRows) *
FROM TableName
ORDER BY Id DESC;</code>

後続のクエリ:

<code class="language-sql">SELECT TOP (@numRows) *
FROM TableName
WHERE Id < @lastId
ORDER BY Id DESC;</code>

ここで、@lastId は、前のページの結果からの最小の Id 値です。

一意の値が欠落している列の場合は、`ORDER BY` 句と `WHERE` 句の両方にセカンダリ列を含め、両方の列に複合インデックスを含めます。

重要な考慮事項:

  • 選択したキーは一意である必要があります。
  • パフォーマンスを向上させるために、「INCLUDE」を使用してインデックスに追加の列を追加します。
  • 「NULL」値を適切に処理します。

以上がキーセットのページネーションにより、OFFSET よりも SQL Server のページネーションの効率がどのように向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。