Quelle est la solution de pagination la plus efficace à l'aide de SQL Server 2005 contre une table avec environ 5 000 à 10 000 rangées? J'en ai vu plusieurs là-bas mais rien ne les comparant. P>
3 Réponses :
Pour une table de taille, utilisez une expression de table commune (CTE) et Row_Number; Utilisez une petite fonction pour calculer les enregistrements à rapporter sur la base de @pagenumber code> et
@Pagesize code> variables (ou quoi que ce soit que vous voulez les appeler). Exemple simple de l'une de nos procédures stockées:
Devez-vous attendre que le processus fonctionne une fois avant de pouvoir obtenir le nombre total de pages?
Oui, la façon dont nous le faisons est d'utiliser les résultats de la région pour renseigner un peu d'objet PagageInfo qui gère le processus d'écriture des liens de numéro de page. En supposant que vous ne faites pas un nombre fou de jointures ou d'appels de fonctions dans la requête, ce bébé devrait courir près d'instantanément, il n'est donc jamais un problème pour nous. Heureux que ça marche pour vous :)
Cela ne fait pas le nombre de comptes sur chaque rangée, non?
Ce sera, mais si je comprends bien, l'analyseur de requête aura mis en cache les résultats de l'expression de la CTE intérieure, de sorte que l'expression du comte ajoute très peu de surcharge notable. Il sera également exécuté uniquement pour les n rangées que vous revenez réellement. Le seul moyen de contourner serait de stocker des résultats dans une variable de table, mais qui ajoute des frais généraux de mémoire.
Excellente solution! Je n'ai jamais pensé ajouter le compte à l'expression de la CTE intérieure.
Si vous n'avez pas besoin de la variable code> totaleRecords de code>, améliorez les performances de ce code en ajoutant haut code> à la table interne
: code> Sélectionnez Haut (@pagenumber * @Pagesize) [champs] `Vous ne ferez que saisir les lignes qui seront nécessaires, au lieu de toute la table.
Une autre façon de saisir le nombre de comptes code> code> est expliqué dans cette réponse: Stackoverflow.com/a/11352/1145177
L'une des meilleures discussions de diverses techniques de radiomessagerie que j'ai jamais lues est ici: SQL Server 2005 Paging - Le Saint Graal . Vous devrez effectuer une inscription gratuite sur SQLServerCentral.com pour voir l'article, mais ça vaut la peine . P>
Même cela devrait aider ..
SELECT * FROM ( SELECT Row_Number() OVER(order by USER_ID) As RowID, COUNT (USER_ID) OVER (PARTITION BY null) AS TOTAL_ROWS, select name from usertbl ) As RowResults WHERE RowID Between 0 AND 25
Dupliqué possible de ASP.NET, SQL 2005 "Paging"
Nombreux: Stackoverflow.com/questions/tagged/pagination+SQL-Server