Heim > Datenbank > MySQL-Tutorial > Wie kann ich einen bestimmten Zeilenbereich in SQL Server effizient auswählen, insbesondere beim Umgang mit großen Datensätzen?

Wie kann ich einen bestimmten Zeilenbereich in SQL Server effizient auswählen, insbesondere beim Umgang mit großen Datensätzen?

Barbara Streisand
Freigeben: 2025-01-01 09:07:10
Original
908 Leute haben es durchsucht

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

Auswählen eines Zeilenbereichs in SQL Server: Verwalten von Zeilenanzahlbeschränkungen

Eine häufige Anforderung in SQL Server ist die Auswahl eines bestimmten Zeilenbereichs von einem Tisch. Dies kann durch verschiedene Methoden erreicht werden, jede mit ihren eigenen Einschränkungen und Leistungsaspekten.

Begrenzte Zeilenanzahl in sys.all_columns

Eine Technik beinhaltet die Verwendung von ROW_NUMBER() und CTEs zum Generieren einer Liste von Zeilen innerhalb eines angegebenen Bereichs. Allerdings stößt dieser Ansatz bei der Anwendung auf große Tabellen auf eine Einschränkung, insbesondere bei Bereichen mit mehr als 7374 Zeilen. Dies liegt daran, dass die zugrunde liegende sys.all_columns-Tabelle über eine alternative Methode zum Generieren eines Zeilenbereichs verfügt.

Alternative Methode zum Generieren eines Zeilenbereichs

Um diese Einschränkung zu überwinden, gibt es eine alternative Methode verwendet kaskadierte CTEs, um eine „Tally Table“ zu erstellen. Dieser Ansatz generiert eine Liste von Zahlen bis zu einem bestimmten Bereich. Hier ist ein Beispiel:

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
Nach dem Login kopieren

Diese Methode erstellt eine Tally-Tabelle bis zum angegebenen @Range und bietet so eine effizientere Möglichkeit, einen Zeilenbereich zu generieren.

Überlegungen zur Leistung

Die Leistung verschiedener Methoden zur Generierung von Tally-Tabellen variiert je nach spezifischen Anforderungen und Datenbankumgebung. Einen umfassenden Leistungsvergleich finden Sie in externen Ressourcen wie dem Artikel von Jeff Moden und anderen Forschungsstudien.

Zusammenfassung

Das Auswählen eines Zeilenbereichs in SQL Server ist üblich Aufgabe mit verschiedenen verfügbaren Techniken. Das Verständnis der Einschränkungen und Leistungsaspekte jedes Ansatzes ermöglicht die Auswahl der effizientesten Methode für das spezifische Szenario. Der hier vorgestellte kaskadierte CTEs-Ansatz bietet eine zuverlässige und skalierbare Möglichkeit, eine Tally-Tabelle für eine große Anzahl von Zeilen zu erstellen und überwindet dabei die Einschränkungen, die bei anderen Methoden auftreten.

Das obige ist der detaillierte Inhalt vonWie kann ich einen bestimmten Zeilenbereich in SQL Server effizient auswählen, insbesondere beim Umgang mit großen Datensätzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage