2009-08-18 4 views
1

Je rencontre un problème de performances dans le développement de l'interface utilisateur actuelle. Le problème, je suppose, est cependant général.Amélioration performane dans l'obtention de données paginées pour la grille asp.net

J'ai une page avec une simple grille asp.net. La grille affichera les données d'une table en fonction de certains critères de recherche. De plus, la grille a une taille de page fixe (disons 10). Il y a un téléavertisseur en bas qui peut être utilisé pour naviguer dans les pages en noir et blanc. À l'arrière, chaque fois que vous appuyez sur le bouton de recherche, une procédure stockée est appelée, qui renvoie les données souhaitées.

procédure stockée a des paramètres tels que CurrentPageIndex, pagesize, d'autres critères de recherche, etc. Voici un code pseudo pour sp:

-- SP begins 
-- calculate the page index range to return required using current page index and page size 
-- query the table in a CTE and do all filtering. Also calculate row numbers so that 
-- correct record range can be returned. 
-- use the cte to return the correct record based on the row number calculated in CTE 
-- SP ends 

Je suite à des problèmes/requêtes dans cette approche

  1. Lorsque La taille de la table DB est grande (disons 10 millions d'enregistrements), les performances se dégradent et cette approche devient peu pratique.
  2. L'utilisation d'une variable de table ou d'une table temporaire est-elle plus utile?
  3. Existe-t-il un autre moyen efficace d'obtenir des données paginées à partir de la base de données?

Salut Dan, l'article a fourni un nouvel aperçu pour le calcul des lignes totales. Très utile. Merci.

Mais y a-t-il toujours un meilleur moyen que d'utiliser CTE lorsque les données sont volumineuses?

Mise à jour: J'ai trouvé quelques autres approaches performants pour obtenir efficacement des enregistrements paginés.

Répondre

1

Il y a un bon article sur SqlServerCentral appelé SQL Server 2005 Paging – The Holy Grail qui montre quelques techniques pour la pagination côté serveur. Vous devrez vous inscrire pour le voir, cependant.

Je sais que pour les jeux de résultats vraiment volumineux, un logiciel tel que Google va simply estimate combien de lignes seront renvoyées, sans avoir besoin de compter toutes les lignes retournées. Désolé, si je ne peux pas donner plus d'aide.

Questions connexes