Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement à la fois le nombre total et les résultats paginés à partir de MySQL ?

Comment puis-je récupérer efficacement à la fois le nombre total et les résultats paginés à partir de MySQL ?

Patricia Arquette
Libérer: 2024-12-03 12:36:10
original
759 Les gens l'ont consulté

How Can I Efficiently Retrieve Both Total Count and Paginated Results from MySQL?

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();
Copier après la connexion

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`);
Copier après la connexion

Dans les requêtes suivantes, utilisez le nombre mis en cache :

SELECT * FROM `table` WHERE `some_condition` LIMIT 0, 10;
Copier après la connexion

Mise en cache du nombre de manière significative améliore 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal