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
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!