Maison  >  Article  >  base de données  >  mysql dizaines de millions d'optimisation des performances des requêtes de pagination de données_Mysql

mysql dizaines de millions d'optimisation des performances des requêtes de pagination de données_Mysql

小云云
小云云original
2017-12-08 09:22:002305parcourir

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

Optimisation de la pagination MySQL au niveau d'un million (pagination rapide MySQL au niveau d'un million)_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!

Déclaration:
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