ホームページ > データベース > mysql チュートリアル > SQL Server でパフォーマンスを維持しながら大規模なデータセットを効率的にページ分割するにはどうすればよいですか?

SQL Server でパフォーマンスを維持しながら大規模なデータセットを効率的にページ分割するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-22 00:52:12
オリジナル
961 人が閲覧しました

How Can I Efficiently Paginate Large Datasets in SQL Server While Maintaining Performance?

大規模なデータセットに対する SQL Server のページネーションの最適化

大規模なデータセットをユーザーに効率的に表示するには、ページ分割が必要です。ページごとに結果の一部のみを表示します。 ただし、パフォーマンスに影響を与えずにページネーションを実装することは、特に結果の総数を事前に確認する必要がある場合に非常に重要です。

古い SQL Server バージョン (2000 ~ 2008): 行番号付け

SQL Server 2012 より前は、行番号付けが標準のページネーション手法でした。 これには、ROW_NUMBER() を使用した行番号の割り当てと、ページ サイズと番号に基づくフィルタリングが含まれます。このアプローチは機能しましたが、大量のデータセットでは非効率であることが判明しました。

SQL Server 2012 以降: OFFSET および FETCH

SQL Server 2012 では、優れた OFFSET 句と FETCH 句が導入されました。これらは、指定された数の行を直接スキップし、必要なサブセットのみを取得します。これにより、行番号付けのオーバーヘッドが排除され、大規模なデータセットのパフォーマンスが大幅に向上します。

クエリの例

次のクエリは、SQL Server 2012 以降で OFFSETFETCH を使用して最初の 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 BYOFFSET を使用する場合、FETCH 句は必須です。
  • OFFSET には FETCH を伴う必要があります。 TOP と一緒に使用することはできません。
  • OFFSETFETCH を使用すると、特に大規模なデータセットのパフォーマンスが大幅に向上します。

以上がSQL Server でパフォーマンスを維持しながら大規模なデータセットを効率的にページ分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート