contexte:
Vous possédez un site web, puisque les données enregistrées à une seule table d'un million, ce qui l'accès aux données très lent, analyse, fond délai Google rapport régulier, en particulier les grandes pages page ne tarde pas.
Environnement de test:
Laissez-nous être familier avec instruction SQL de base, la prochaine, nous allons voir un test de la table d'information de base
utiliser infomation_schema
SELECT * FROM tables où TABLE_SCHEMA = 'dbname' ET TABLE_NAME = 'produit'
Résultats de la requête:
A partir de la figure ci-dessus, nous pouvons voir le tableau d'information de base:
Tableau rangées: 866 633
longueur de données moyenne de chaque ligne: 5133 octets
Taille de table unique: 4,448,700,632 bytes
A propos des lignes et des tables sont des unités de taille octet, nous pouvons savoir par calcul
longueur de la ligne moyenne: environ 5 km
seule table Taille totale: 4.1g
types champ de table a varchar, datetime, texte, etc., id champ clé primaire
test test
1. Direct avec démarrage limite, l'énoncé de la page de compte, que j'ai utilisé dans la méthode du programme:
select * du début de course produit, le nombre
Lorsque la page de démarrage est petite, il n'y a pas de problèmes de performances des requêtes, nous examinons respectivement de 10, 100, 1000, 10000 temps d'exécution pour commencer la recherche (page Prélever 20), comme suit:
sélectionner * de limite de produit 10 , 20 0,016秒
sélectionner * de limite de produit 100 , 20 0,016秒
sélectionner * de limite de produit 1000 , 20 0,047秒
sélectionner * de limite de produit 10000 , 20 0,094秒
Nous avons vu que l'augmentation de l'enregistrement initial, le temps aussi avec l'augmentation, ce qui indique la limite de déclaration de pagination avec le numéro de page de départ est une excellente relation, nous commençons à enregistrer le changement de vue 40W (c.-à-enregistrement environ général)
select * from limite de produit 400000, 20 3,229 秒
Nous examinons la dernière fois d'enregistrement
select * from limite de produit 866613, 20 37,44 秒
Pas étonnant que les moteurs de recherche exploration de la page nous rapportent souvent un délai d'attente, comme la plus grande PAGE de cette page clairement que ce temps est intolérable.
À partir de laquelle nous pouvons résumer deux choses:
1) est proportionnelle à la prise de position de la limite de temps d'interrogation et commencer l'enregistrement
2) mysql l'instruction limite est très pratique, mais la plupart des enregistrements de la table ne sont pas adaptés à une utilisation directe.
2. problème d'optimisation de la performance limite à la pagination
Couvrant l'utilisation de la table d'index pour accélérer la requête radiomessagerie
Nous savons tous que l'utilisation de la requête d'index si l'instruction ne contient que la colonne d'index (couvrant les index), cette situation va bientôt des requêtes.
Parce que l'utilisation de l'indice des algorithmes d'optimisation La recherche et les données d'index dans la requête ci-dessus, ne pas aller pour répondre aux données pertinentes, cela permet d'économiser beaucoup de temps. De plus Mysql est également lié au cache d'index, à un moment de meilleure utilisation élevée des effets de mise en cache concurrence.
Dans notre exemple, nous savons que le champ id est la clé primaire, contient naturellement l'index de clé primaire par défaut. Maintenant, nous allons voir comment utiliser un résultat de requête d'index de couverture:
La dernière page des données de requête (couvrant l'utilisation de l'index ne contient que la colonne id), entre nous suit comme:
sélectionner id de limite de produit 866613, 20 0,2 秒
En ce qui concerne la requête toutes les colonnes de 37,44 secondes pour améliorer d'environ 100 fois la vitesse de
Donc, si nous devons interroger toutes les colonnes, il y a deux façons, on est l'id> = forme, et l'autre est d'utiliser rejoindre, regardez la situation actuelle:
SELECT * FROM produit WHERE ID> = (select id de limite de produit 866613, 1) limite 20
Délai de requête est de 0,2 seconde, et est tout simplement un saut qualitatif ah, ha ha
une autre façon
SELECT * FROM produit une jointure (select id de limite de produit 866613, 20) b = ON a.ID b.id
le temps de requête est très courte, la louange!
En fait, à la fois un principe à la place, donc l'effet est le même.