Sur un site comptant un grand nombre d'utilisateurs, la pagination doit-elle être gérée dans le code ou à l'aide d'une procédure stockée ? Si vous avez utilisé la mise en cache, veuillez indiquer les facteurs de réussite.
Réponses
Trop de publicités?Personnellement, je ne page jamais de choses en dehors de SQL Server. Je le fais au niveau de la base de données, car si vous avez un million d'enregistrements à paginer, si vous les récupérez dans la couche application et que vous les paginez à ce niveau, vous payez déjà des frais de mise en page. énorme coût.
Dans 99,9 % des cas, la pagination doit être effectuée sur le serveur de base de données. Toutefois, les procédures stockées ne sont pas tenues de le faire et, en fait, de nombreuses solutions de procédures stockées s'appuient sur des curseurs et sont assez inefficaces. L'idéal est d'utiliser une seule instruction SQL adaptée à votre plate-forme de base de données pour récupérer uniquement les enregistrements dont vous avez besoin, et pas plus.
Je le ferais au niveau de la base de données. En ce qui concerne le serveur SQL 2005, j'utiliserais la nouvelle fonction ROW_NUMBER(), voir : http://stackoverflow.com/questions/2840/paging-sql-server-2005-results
Où se trouverait un sql typique :
SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
WHERE RowID Between 0 AND 9
Ici http://aspnet.4guysfromrolla.com/articles/031506-1.aspx vous pouvez voir comment cela fonctionne et examiner une petite référence de Scott Mitchell.
La plupart des fournisseurs de bases de données offrent un support de pagination riche au niveau de la base de données. Utilisez-le ;-p Notez qu'il n'est pas nécessaire d'utiliser une procédure stockée pour faire cela (je vais mettre de côté le débat éternel entre la procédure stockée et la commande ad-hoc).
Par ailleurs, de nombreux cadres de travail également le fait pour vous de manière efficace. Par exemple, dans .NET 3.5 (avec LINQ), vous pouvez utiliser Skip()
y Take()
pour faire de la pagination qui est utilisée à la base de données.
Je pense que Cela dépend sur le nombre d'enregistrements à paginer. Par exemple, si vous avez 100 enregistrements à paginer, je pense qu'il n'est pas nécessaire d'utiliser la fonction de pagination de SQL pour faire cela. J'essaie toujours de garder à l'esprit le principe KISS et l'optimisation prématurée.