MySQL table unique d'un million d'enregistrements de données Page optimisation des performances

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.

Publié huit articles originaux · louange gagné 13 · vues + 60000

Je suppose que tu aimes

Origine blog.csdn.net/qq_37655695/article/details/60776668
conseillé
Classement