Maison >base de données >tutoriel mysql >Comment puis-je paginer efficacement de grands ensembles de données dans SQL Server tout en conservant les performances ?

Comment puis-je paginer efficacement de grands ensembles de données dans SQL Server tout en conservant les performances ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-22 00:52:12964parcourir

How Can I Efficiently Paginate Large Datasets in SQL Server While Maintaining Performance?

Optimisation de la pagination dans SQL Server pour les grands ensembles de données

La présentation efficace de grands ensembles de données aux utilisateurs nécessite une pagination – affichant seulement une partie des résultats par page. Cependant, la mise en œuvre de la pagination sans impact sur les performances est cruciale, en particulier lorsqu'il est nécessaire d'effectuer au préalable un décompte total des résultats.

Anciennes versions de SQL Server (2000-2008) : numérotation des lignes

Avant SQL Server 2012, la numérotation des lignes était la technique de pagination standard. Cela impliquait d'attribuer un numéro de ligne à l'aide de ROW_NUMBER() et de filtrer en fonction de la taille et du numéro de la page. Bien que fonctionnelle, cette approche s'est avérée inefficace avec des ensembles de données importants.

SQL Server 2012 et au-delà : OFFSET et FETCH

SQL Server 2012 a introduit les clauses supérieures OFFSET et FETCH. Ceux-ci sautent directement un nombre spécifié de lignes et récupèrent uniquement le sous-ensemble requis. Cela améliore considérablement les performances des grands ensembles de données en éliminant la surcharge liée à la numérotation des lignes.

Requête illustrative

La requête suivante montre la récupération des 10 premières lignes et du nombre total de lignes à l'aide de OFFSET et FETCH dans SQL Server 2012 et versions ultérieures :

<code class="language-sql">DECLARE @RowsPerPage INT = 10;

WITH TotalResults AS (
  SELECT COUNT(*) OVER() AS TotalRows
  FROM TableName
)
SELECT *
FROM TableName
ORDER BY id
OFFSET 0 ROWS
FETCH NEXT @RowsPerPage ROWS ONLY;

SELECT TotalRows
FROM TotalResults;</code>

Remarques importantes :

  • Une clause ORDER BY est obligatoire lors de l'utilisation de OFFSET et FETCH.
  • OFFSET doit accompagner FETCH ; ils ne peuvent pas être utilisés avec TOP.
  • L'emploi de OFFSET et FETCH améliore considérablement les performances, en particulier avec des ensembles de données étendus.

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