ホームページ > データベース > mysql チュートリアル > SQL Server で特定の数の行を効率的に選択するにはどうすればよいですか?

SQL Server で特定の数の行を効率的に選択するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-29 18:46:11
オリジナル
440 人が閲覧しました

How to Efficiently Select a Specific Number of Rows in SQL Server?

SQL Server で N 行を選択

クエリ 1:

DECLARE @Range AS INT = 10

;WITH CTE AS(
    SELECT TOP (@Range) Duration = ROW_NUMBER() OVER(ORDER BY OBJECT_ID)
    FROM sys.all_columns
    ORDER BY [Object_id]
)
SELECT Duration from CTE
ログイン後にコピー

説明:

このクエリは、 sys.all_columns テーブル。したがって、@Range を 10,000 に設定すると、sys.all_columns.

クエリ 2:

DECLARE @start INT = 1;
DECLARE @end INT = 10;

WITH numbers AS (
    SELECT @start AS number
    UNION ALL
    SELECT number + 1 
    FROM  numbers
    WHERE number < @end
)
SELECT *
FROM numbers
OPTION (MAXRECURSION 0);
ログイン後にコピー

説明:

これ代替クエリは、再帰共通テーブル式 (CTE) を使用して、@start から @end までの数値のテーブルを生成します。 OPTION (MAXRECURSION 0) は、行数が無制限のテーブルを作成する際の再帰エラーを防ぐために必要です。

カスケード CTE ソリューション:

説明:

カスケード 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
ログイン後にコピー

カスケード CTE の利点:

    他のテーブルからの読み取りを行わずに行を生成します。
  • 簡単に拡張して、数十億のテーブルを作成できますrows.
  • 他のメソッドとのパフォーマンス比較で優れたパフォーマンスを発揮します。

以上がSQL Server で特定の数の行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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