Utilisez la pagination limitée lorsque la quantité de données MySQL est importante. À mesure que le nombre de pages augmente, l'efficacité des requêtes diminue. Cet article partage avec vous la méthode d'optimisation des performances de l'auteur lors de l'utilisation de MySQL pour effectuer des requêtes de pagination avec des dizaines de millions de données. C'est un très bon article et j'espère qu'il pourra aider tout le monde.
Expérience
1. Utilisez directement le début de la limite, comptez les instructions de pagination :
select * from order limit start, count
Lorsque la page de démarrage est petite, la requête n'a pas Question de performances, regardons le temps d'exécution de la pagination à partir de 10, 100, 1000, 10000 (20 entrées par page), comme suit :
select * from order limit 10, 20 0.016秒 select * from order limit 100, 20 0.016秒 select * from order limit 1000, 20 0.047秒 select * from order limit 10000, 20 0.094秒
Nous avons vu qu'à mesure que l'enregistrement de départ augmente, le temps augmente également. Cela montre que la limite de déclaration de pagination est étroitement liée au numéro de page de départ, modifions donc l'enregistrement de départ en 40w et jetons un œil
select * from order limit 400000, 20 3.229秒
Regardez le temps qu'on a mis pour récupérer la dernière page des disques
select * from order limit 800000, 20 37.44秒
Evidemment ce genre de temps est intolérable.
On peut également en conclure deux choses :
1) Le temps d'interrogation de l'instruction limite est proportionnel à la position de l'enregistrement de départ
2) L'instruction limite de mysql est très pratique, mais il ne convient pas à une utilisation directe sur des tables comportant de nombreux enregistrements.
2. Méthode d'optimisation des performances pour le problème de pagination limite
Utilisez l'index de couverture de la table pour accélérer la requête de pagination
Nous savons tous que si l'instruction qui utilise l'index requête uniquement Si cette colonne d'index (index de couverture) est incluse, la requête sera plus rapide dans ce cas.
Étant donné qu'il existe un algorithme d'optimisation pour la recherche d'index et que les données se trouvent sur l'index de requête, il n'est pas nécessaire de trouver l'adresse des données pertinente, ce qui permet de gagner beaucoup de temps. De plus, il existe également un cache d'index associé dans Mysql. Il est préférable d'utiliser le cache lorsque la concurrence est élevée.
Dans notre exemple, nous savons que le champ id est la clé primaire, il contient donc naturellement l'index de clé primaire par défaut. Voyons maintenant comment fonctionne la requête utilisant l'index de couverture :
Cette fois, nous interrogeons les données de la dernière page (en utilisant l'index de couverture, contenant uniquement la colonne id), comme suit :
select id from order limit 800000, 20 0.2秒
Par rapport aux 37,44 secondes d'interrogation de toutes les colonnes, la vitesse est augmentée d'environ 100 fois
Donc, si nous voulons également interroger toutes les colonnes, il existe deux méthodes, l'une est id> ;= form, l'autre est d'utiliser join, regardez la situation réelle :
SELECT * FROM order WHERE ID > =(select id from order limit 800000, 1) limit 20
Le temps de requête est de 0,2 seconde, ce qui est un saut qualitatif, haha
Une autre façon d'écrire
SELECT * FROM order a JOIN (select id from order limit 800000, 20) b ON a.ID = b.id
Le temps de requête est également très court.
L'avez-vous déjà appris ? Dépêchez-vous et essayez-le.
Recommandations associées :
mysql dizaines de millions de requêtes de données
mysql dizaines de millions de statistiques de comptage comparaison_MySQL
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!