Pagination MySQL : récupérer efficacement les résultats et le nombre total
Lors de l'implémentation de la pagination dans MySQL, il est courant d'effectuer deux requêtes distinctes : une à obtenir le nombre total de résultats et un autre pour limiter les enregistrements récupérés. Cette approche, connue sous le nom de double requête, peut s'avérer inefficace pour les grands ensembles de données.
Cependant, la question se pose de savoir s'il est possible de récupérer à la fois le nombre total de résultats et de limiter les résultats dans une seule requête. Bien qu'il n'existe aucun moyen direct d'y parvenir, deux méthodes alternatives sont disponibles :
SQL_CALC_FOUND_ROWS et FOUND_ROWS()
Au lieu d'effectuer une double requête, vous pouvez utiliser SQL_CALC_FOUND_ROWS et FOUND_ROWS() pour obtenir un résultat similaire. La requête avec SQL_CALC_FOUND_ROWS précède la requête limitante et l'appel FOUND_ROWS() récupère le nombre total.
Exemple :
SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE `some_condition`; SELECT FOUND_ROWS();
Remarque : Cette méthode présente un inconvénient potentiel. MySQL a un bug qui affecte les requêtes ORDER BY lors de l'utilisation de cette technique, ce qui la rend plus lente sur les grandes tables.
Mise en cache du nombre
Une solution alternative consiste à mettre en cache le nombre total pour une durée déterminée. Cette approche élimine le besoin d'une requête distincte pour récupérer le décompte tout en préservant l'efficacité.
Exemple :
Récupérez le décompte et mettez-le en cache pendant 10 minutes :
SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);
Dans les requêtes suivantes, utilisez le cache count :
SELECT * FROM `table` WHERE `some_condition` LIMIT 0, 10;
La mise en cache du nombre améliore considérablement les performances, en particulier pour les pages fréquemment visitées. Bien qu'il ne s'agisse pas d'une solution à requête unique, elle obtient le même résultat tout en étant plus efficace qu'une double requête.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3