J'ai une requête de base de données qui pourrait entraîner un grand ensemble de résultats. Le client qui affiche les données reçoit les données sur le réseau, donc l'idée était de minimiser la quantité de données transférées en récupérant uniquement les 50 premiers résultats de la base de données et en les envoyant au client. Ensuite, je fournirai la possibilité de passer à la deuxième page pour récupérer les 50 prochains résultats, etc. (quelque chose de similaire, par exemple, ce que Google propose)
La question est de savoir quel est le moyen efficace de mettre en œuvre la pagination. Je veux m'assurer que mssql utilise autant que possible le cache et que le même n'est pas exécuté à nouveau à chaque fois que je change la pagination.
Il y a plus de clients qui interrogent la base de données en même temps. Moteur sql utilisé: MS SQL 2005
Mes idées étaient:
- Utilisez un état SQL préparé pour assurer le partage du plan d'exécution
- utiliser la variable ROW_COUNT pour récupérer uniquement les lignes nécessaires
Mais est-ce vraiment le moyen le plus efficace? Ou pensez-vous qu'il serait préférable de récupérer l'ensemble des résultats et d'implémenter la pagination dans le code qui envoie les données au client?
Merci pour vos conseils!
Cordialement, Tomas
la source
Cela dépend de votre environnement. Je voudrais configurer un test en utilisant les deux méthodes et voir celle qui vous convient le mieux. Personnellement, je paginerais sur le serveur. Moins de données sur le fil et moins de données dans la RAM du client, mieux c'est. Si vous pouvez contrôler les spécifications de la machine cliente, tout le trafic est acheminé via un réseau local non saturé et les clients parcourent toujours plusieurs pages rapidement, vous souhaiterez peut-être effectuer une page sur le client.
la source