Heim >Datenbank >MySQL-Tutorial >Wie wähle ich effizient eine bestimmte Anzahl von Zeilen in SQL Server aus?

Wie wähle ich effizient eine bestimmte Anzahl von Zeilen in SQL Server aus?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 18:46:11441Durchsuche

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

N Zeilen in SQL Server auswählen

Abfrage 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

Erklärung:

Diese Abfrage ist durch die Anzahl der Zeilen in sys.all_columns begrenzt Tisch. Wenn Sie @Range auf 10.000 setzen, werden daher nur 7.374 Zeilen zurückgegeben, da dies die Anzahl der Zeilen in sys.all_columns ist.

Abfrage 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);

Erklärung:

Diese alternative Abfrage verwendet a rekursiver gemeinsamer Tabellenausdruck (CTE), um eine Zahlentabelle von @start bis @end zu generieren. Die OPTION (MAXRECURSION 0) ist notwendig, um Rekursionsfehler beim Erstellen einer Tabelle mit einer unbegrenzten Anzahl von Zeilen zu verhindern.

Kaskadierte CTE-Lösung:

Erklärung:

Ein kaskadierter CTE-Ansatz ist der schnellste Weg, eine „Tally Table“ für zu erstellen eine große Anzahl von Zeilen.

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

Vorteile von kaskadiertem CTE:

  • Generiert Zeilen ohne Lesevorgänge aus anderen Tabellen.
  • Kann problemlos erweitert werden, um Tabellen mit Milliarden von Zeilen zu erstellen.
  • Erbringt unter anderem gute Ergebnisse bei Leistungsvergleichen Methoden.

Das obige ist der detaillierte Inhalt vonWie wähle ich effizient eine bestimmte Anzahl von Zeilen in SQL Server aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn