Maison >base de données >tutoriel mysql >Que dois-je faire si la requête de comptage MySQL est très lente ? solution d'optimisation de la vitesse des requêtes MySQL
La vitesse lente des requêtes MySQL est une chose très gênante. Par conséquent, l'auteur a passé du temps à trier le plan d'optimisation de la vitesse des requêtes MySQL. Cet article est entièrement écrit par l'auteur. questions ou erreurs, vous êtes invités à me communiquer et à me corriger. Nous pouvons apprendre et progresser ensemble.
Tutoriels vidéo MySQL associés recommandés : "Tutoriel MySQL"
Cet article est également écrit car Cela peut vous aider à dissiper vos doutes et à revenir au sujet. Ce qui suit est mon jugement basé sur la structure des données de l'arbre B+ et les spéculations sur les résultats expérimentaux
Aujourd'hui, j'ai expérimenté avec MySQL. Optimisation du fonctionnement de count(), comme suit La discussion est basée sur le moteur de stockage mysql5.7 InnoDB x86.
La structure de la table créée est la suivante (la quantité de données est de 1 million) :
Tout d'abord, à propos du count(*) de MySQL, count( PK), count(1 ) Lequel est le plus rapide ?
Les résultats de la mise en œuvre sont les suivants :
Il n'y a aucune différence ! Après avoir ajouté la clause WHERE, les trois requêtes prennent le même temps, je ne posterai donc pas de photos.
J'ai écrit une select count(*) from table
instruction SQL lorsque j'étais dans l'entreprise auparavant, et c'était très lent quand il y avait beaucoup de données. Alors comment optimiser ?
Cela commence par l'index d'InnoDB. L'index d'InnoDB est B+Tree.
Pour l'index de clé primaire : il stocke uniquement les données sur les nœuds feuilles, sa clé est la clé primaire et la valeur est l'intégralité des données .
Pour les index auxiliaires : key est la colonne à indexer et value est la clé primaire.
Cela nous donne deux informations :
1. Les données entières seront trouvées en fonction de la clé primaire
2. Seule la clé primaire pourra être trouvée en fonction de l'index auxiliaire, et ensuite. les informations restantes doivent être trouvées via la clé primaire.
Donc, si nous voulons optimiser l'opération count(*), nous devons trouver une colonne short et créer un index auxiliaire pour celle-ci.
Dans mon exemple, c'est status
, bien que sa « gravité » soit proche de 0.
Créez d'abord un index : ALTER TABLE test1 ADD INDEX (
status);
puis interrogez, comme indiqué ci-dessous :
Comme vous pouvez le constater, le temps de requête est passé de 3,35 s à 0,26 s et la vitesse de requête a augmenté de près de 13 fois.
Si l'index est la colonne str
, quel sera le résultat ?
Créez d'abord un index : alter table test1 add index (str)
Les résultats sont les suivants :
Comme vous pouvez le voir, le temps est de 0,422 s, ce qui est également très rapide, mais par rapport à la colonne status
Il y a un écart d'environ 1,5 fois.
Pour faire une expérience plus audacieuse, j'ai supprimé l'index de la colonne status
, créé un index conjoint de status
et left(omdb,200)
(cette colonne a en moyenne 1000 caractères), puis j'ai regardé au moment de la requête.
Créer un index : alter table test1 add index (
statut,omdb(200))
Les résultats sont les suivants :
Le temps est de 1,172 s
alter table test1 add index (status
,imdbid );
Supplémentaire ! !
Faites attention aux échecs d'index !
L'apparence normale une fois l'index établi :
Vous pouvez voir que key_len vaut 6, la description d'Extra utilise index.
Et si l'index échoue :
Il existe de nombreux cas d'échec d'index, tels que l'utilisation de fonctions, d'opérations !=, etc. Veuillez vous référer à la documentation officielle pour plus de détails.
Je n'ai pas de recherche approfondie sur MySQL. Ce qui précède est basé sur mon jugement basé sur la structure des données de l'arbre B+ et sur les spéculations sur les résultats expérimentaux. S'il y a des lacunes, veuillez me corriger.
Articles connexes :
Sql server2005 Résumé de 50 façons d'optimiser la vitesse des requêtes
Améliorer la vitesse des requêtes : plan d'optimisation de la base de données SQL Server
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!