Quelle est la meilleure façon de paginer les résultats dans SQL Server

Quelle est la meilleure façon de paginer les résultats dans SQL Server

Obtenir le nombre total de résultats et paginer sont deux opérations différentes. Pour les besoins de cet exemple, supposons que la requête que vous traitez est

SELECT * FROM Orders WHERE OrderDate >= '1980-01-01' ORDER BY OrderDate

Dans ce cas, vous détermineriez le nombre total de résultats en utilisant :

SELECT COUNT(*) FROM Orders WHERE OrderDate >= '1980-01-01'

…ce qui peut sembler inefficace, mais est en réalité assez performant, à condition que tous les index, etc., soient correctement configurés.

Ensuite, pour obtenir les résultats réels de manière paginée, la requête suivante serait la plus efficace :

SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY OrderDate ) AS RowNum, *
          FROM      Orders
          WHERE     OrderDate >= '1980-01-01'
        ) AS RowConstrainedResult
WHERE   RowNum >= 1
    AND RowNum < 20
ORDER BY RowNum

Cela renverra les lignes 1 à 19 de la requête originale. L’avantage ici, notamment pour les applications web, est que vous n’avez pas besoin de conserver d’état, à l’exception des numéros de lignes à renvoyer.