大規模なデータセットに対する SQL Server のページネーションの最適化
大規模なデータセットをユーザーに効率的に表示するには、ページ分割が必要です。ページごとに結果の一部のみを表示します。 ただし、パフォーマンスに影響を与えずにページネーションを実装することは、特に結果の総数を事前に確認する必要がある場合に非常に重要です。
古い SQL Server バージョン (2000 ~ 2008): 行番号付け
SQL Server 2012 より前は、行番号付けが標準のページネーション手法でした。 これには、ROW_NUMBER()
を使用した行番号の割り当てと、ページ サイズと番号に基づくフィルタリングが含まれます。このアプローチは機能しましたが、大量のデータセットでは非効率であることが判明しました。
SQL Server 2012 以降: OFFSET
および FETCH
SQL Server 2012 では、優れた OFFSET
句と FETCH
句が導入されました。これらは、指定された数の行を直接スキップし、必要なサブセットのみを取得します。これにより、行番号付けのオーバーヘッドが排除され、大規模なデータセットのパフォーマンスが大幅に向上します。
クエリの例
次のクエリは、SQL Server 2012 以降で OFFSET
と FETCH
を使用して最初の 10 行と合計行数を取得する方法を示しています。
<code class="language-sql">DECLARE @RowsPerPage INT = 10; WITH TotalResults AS ( SELECT COUNT(*) OVER() AS TotalRows FROM TableName ) SELECT * FROM TableName ORDER BY id OFFSET 0 ROWS FETCH NEXT @RowsPerPage ROWS ONLY; SELECT TotalRows FROM TotalResults;</code>
重要な注意事項:
ORDER BY
と OFFSET
を使用する場合、FETCH
句は必須です。OFFSET
には FETCH
を伴う必要があります。 TOP
と一緒に使用することはできません。OFFSET
と FETCH
を使用すると、特に大規模なデータセットのパフォーマンスが大幅に向上します。以上がSQL Server でパフォーマンスを維持しながら大規模なデータセットを効率的にページ分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。