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` 句の両方にセカンダリ列を含め、両方の列に複合インデックスを含めます。
重要な考慮事項:
以上がキーセットのページネーションにより、OFFSET よりも SQL Server のページネーションの効率がどのように向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。