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
Libérer: 2024-12-29 18:46:11
original
435 Les gens l'ont consulté

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
Copier après la connexion

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);
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal