ホームページ > データベース > mysql チュートリアル > 特に大規模なデータセットを扱う場合、SQL Server で特定の範囲の行を効率的に選択するにはどうすればよいですか?

特に大規模なデータセットを扱う場合、SQL Server で特定の範囲の行を効率的に選択するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-01 09:07:10
オリジナル
876 人が閲覧しました

How Can I Efficiently Select a Specific Range of Rows in SQL Server, Especially When Dealing with Large Datasets?

SQL Server での行の範囲の選択: 行数制限の管理

SQL Server の一般的な要件は、特定の行範囲を選択することです。テーブルから。これは、çeşitli メソッドを通じて実現できますが、それぞれに独自の制限とパフォーマンスに関する考慮事項があります。

sys.all_columns の行数を制限する

1 つの手法には、ROW_NUMBER() とCTE は、指定された範囲内の行のリストを生成します。ただし、このアプローチは、大きなテーブル、特に 7374 行を超える範囲に適用すると制限に直面します。これは、基になる sys.all_columns テーブルの実行数が限られているためです。

行の範囲を生成するための代替方法

この制限を克服するには、代替方法を使用します。カスケード CTE を利用して「集計テーブル」を作成します。このアプローチでは、指定された範囲までの数値のリストが生成されます。以下に例を示します。

DECLARE @Range AS INT = 7374

;WITH E1(N) AS( -- 10 ^ 1 = 10 rows
    SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows
E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows
CteTally(N) AS(
    SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    FROM E8
)
SELECT * FROM CteTally
ログイン後にコピー

このメソッドは、指定された @Range までの集計テーブルを作成し、行範囲を生成するより効率的な方法を提供します。

パフォーマンスに関する考慮事項

集計テーブルを生成するさまざまな方法のパフォーマンスは、特定の要件とデータベース環境によって異なります。包括的なパフォーマンスの比較については、Jeff Moden の記事やその他の調査研究などの外部リソースを参照してください。

概要

SQL Server で行の範囲を選択することは一般的です。各アプローチの制限とパフォーマンスに関する考慮事項を理解することで、特定のシナリオに最も効率的な方法を選択できるようになります。ここで紹介するカスケード CTE アプローチは、他の方法で発生する制限を克服し、最大行数の集計テーブルを生成する信頼性が高くスケーラブルな方法を提供します。

以上が特に大規模なデータセットを扱う場合、SQL Server で特定の範囲の行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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