2011-04-01 2 views
1

J'ai une table dans sql 2005 avec un grand nombre de données - comme 1 500 000 lignes en ce moment et plus tard, il devrait être plus. Avant la pagination, j'ai besoin de détecter les lignes que l'utilisateur peut lire (la requête SQL pour la vérification est lourde, se référant à plusieurs autres tables) et le résultat doit être paginé. Quelle est la meilleure pratique pour travailler avec l'énorme table qui doit être filtrée et paginée après tout?SQL 2005 Grande table pagination de données avec filtre

Merci d'avance!

Répondre

1

Si vous souhaitez renvoyer des résultats paginés dans SQL Server, il est probablement préférable d'utiliser la fonction ROW_NUMBER(). Voici un exemple qui vous obtenir les résultats 400ème-410ème:

SELECT ID, Name, Date 
FROM  (SELECT TOP 410 ROW_NUMBER() OVER (ORDER BY id) 
      AS Row, ID, Name, Date FROM MyTable) 
      AS MyPagedTable 
WHERE Row >= 400 AND Row <= 410 

Assurez-vous que vous avez les index appropriés en place. Si vous rencontrez des problèmes de performances, je vous recommande de regarder le plan d'exécution et de voir où se trouvent les zones problématiques.

+0

En fait, la fonction row_number() n'est pas très performante. Par exemple, si vous avez une table avec 1 500 000 et que vous n'avez besoin que des 20 dernières lignes (dernière page), cela prendra beaucoup de temps, même sans filtrage. – SchmerZ

Questions connexes