Maison >base de données >tutoriel mysql >Comment sélectionner efficacement un nombre spécifique de lignes dans SQL Server ?

Comment sélectionner efficacement un nombre spécifique de lignes dans SQL Server ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-29 18:46:11451parcourir

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

Sélection de N lignes dans SQL Server

Requête 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

Explication :

Cette requête est limitée par le nombre de lignes dans sys.all_columns tableau. Par conséquent, définir @Range sur 10 000 ne renverra que 7 374 lignes, car il s'agit du nombre de lignes dans sys.all_columns.

Requête 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);

Explication :

Cette requête alternative utilise une requête récursive expression de table commune (CTE) pour générer une table de nombres de @start à @end. L'OPTION (MAXRECURSION 0) est nécessaire pour éviter les erreurs de récursion lors de la création d'une table avec un nombre illimité de lignes.

Solution CTE en cascade :

Explication :

Une approche CTE en cascade est le moyen le plus rapide de créer une « table de pointage » pour un grand nombre de lignes.

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

Avantages du CTE en cascade :

  • Génère des lignes sans aucune lecture à partir d'autres tables.
  • Peut peut facilement être étendu pour créer des tableaux avec des milliards de lignes.
  • Fonctionne bien dans les comparaisons de performances, entre autres méthodes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn