Maison > base de données > tutoriel mysql > Améliorer l'efficacité du travail : conseils d'optimisation MySQL

Améliorer l'efficacité du travail : conseils d'optimisation MySQL

不言
Libérer: 2018-11-14 16:54:37
avant
2606 Les gens l'ont consulté

Le contenu de cet article concerne l'amélioration de l'efficacité du travail : les compétences d'optimisation MySQL, qui ont une certaine valeur de référence, peuvent s'y référer.

1. Ajouter des index sur toutes les colonnes utilisées pour où, trier par et regrouper par

1) En plus de garantir qu'un enregistrement est marqué de manière unique, l'index peut C'est également le serveur MySQL qui obtient plus rapidement les résultats de la base de données. Les index jouent également un rôle très important dans le tri.

L'index de MySQL peut occuper de l'espace supplémentaire et réduire dans une certaine mesure les performances d'insertion, de suppression et de mise à jour. Cependant, si votre table contient plus de 10 lignes de données, l'indexation peut réduire considérablement le temps d'exécution de la recherche.

2) Il est fortement recommandé d'utiliser les « échantillons de données les plus défavorables » pour tester les requêtes MySql afin de mieux comprendre comment la requête se comportera en production.

3) Supposons que vous exécutiez l'instruction de requête suivante dans une table de base de données comportant plus de 500 lignes :

mysql>select customer_id, customer_name from customers where customer_id='345546'
Copier après la connexion

La requête ci-dessus forcera le serveur Mysql à effectuer une analyse complète de la table pour obtenir les données des résultats de recherche.

4) Modèle, Mysql fournit une instruction Explain spéciale pour analyser les performances de votre instruction de requête. Lorsque vous ajoutez une instruction de requête après le mot-clé, MySql affichera toutes les informations dont dispose l'optimiseur sur l'instruction.

Si nous utilisons l'instruction expliquer pour analyser la requête ci-dessus, nous obtiendrons les résultats d'analyse suivants :

mysql> explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | customers | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    10.00 | Using where |
Copier après la connexion

Comme vous pouvez le voir, l'optimiseur affiche des informations très importantes, qui peuvent aider nous affinons les tables de la base de données. Tout d'abord, MySql effectuera une analyse complète de la table car la colonne clé est Null. Deuxièmement, le serveur MySql a clairement indiqué qu'il analyserait 500 lignes de données pour compléter cette requête.

5) Afin d'optimiser la requête ci-dessus, il suffit d'ajouter un index m sur la colonne customer_id :

mysql> Create index customer_id ON customers (customer_Id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
Copier après la connexion

Si nous exécutons à nouveau l'instruction expliquer, nous obtiendrons le résultats suivants :

mysql> Explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table     | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | customers | NULL       | ref  | customer_id   | customer_id | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
Copier après la connexion

2. Utilisez Union pour optimiser l'instruction Like

1) Parfois, vous devrez peut-être utiliser l'opérateur or dans la requête à des fins de comparaison. Lorsque le mot clé or est utilisé trop fréquemment dans la clause Where, l'optimiseur MySQL peut choisir par erreur une analyse complète de la table pour récupérer les enregistrements. La clause union peut accélérer l'exécution des requêtes, en particulier lorsque l'une des requêtes a un index optimisé et que l'autre requête a également un index optimisé.

Par exemple, lorsqu'il y a des index sur first_name et last_name respectivement, exécutez l'instruction de requête suivante :

mysql> select * from students where first_name like 'Ade%' or last_name like 'Ade%'
Copier après la connexion

La requête ci-dessus est liée à la requête suivante qui utilise l'union pour fusionner les deux les requêtes qui utilisent pleinement l'instruction de requête par rapport à, la vitesse est beaucoup plus lente.

mysql> select * from students where first_name like 'Ade%' union all select * from students wherelast_name like 'Ade%'
Copier après la connexion

3. Évitez d'utiliser des expressions avec des caractères génériques de début

Mysql ne peut pas utiliser l'index lorsqu'il y a des caractères génériques de début dans la requête. En prenant la table student ci-dessus comme exemple, la requête suivante amènera MySQL à effectuer une analyse complète de la table et à ajouter un index au champ first_name à temps.

mysql> select * from students where first_name like '%Ade'
Copier après la connexion

En utilisant l'analyse expliquer, les résultats suivants sont obtenus :

 | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | students | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    11.11 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
Copier après la connexion

Comme indiqué ci-dessus, Mysql analysera les 500 lignes de données, ce qui rendra la requête extrêmement lente.

4. Optimiser l'architecture de la base de données

1) Normalisation

Tout d'abord, normalisez toutes les tables de la base de données, même s'il peut y avoir des pertes. Par exemple, si vous devez créer deux tables pour enregistrer les données des clients et des commandes, vous devez référencer le client par ID client dans la table des commandes, et non l'inverse. Le schéma ci-dessous montre l'architecture de la base de données conçue sans aucune redondance des données.

Améliorer lefficacité du travail : conseils doptimisation MySQL

5. Utilisez le meilleur type de données

1) MySQL prend en charge différents types de données, notamment entier, flottant, double, date. , dateheure, varchar, texte, etc. Lors de la conception des tables de base de données, vous devez essayer d'utiliser le type de données le plus court pouvant satisfaire aux caractéristiques.

Par exemple, si vous concevez une table d'utilisateurs système et que le nombre d'utilisateurs ne dépassera pas 100, vous devez utiliser le type 'TINYINT' pour user_ud. La plage de valeurs de ce type est comprise entre -128 et 128. Si un champ doit stocker des valeurs de type date, il est préférable d'utiliser le type datetime, car il n'est pas nécessaire d'effectuer une conversion de type complexe lors de l'interrogation.

Lorsque les valeurs sont toutes de type numérique, utilisez Integer. Les valeurs de type Integer sont plus rapides que les valeurs de type Text lors de l'exécution de calculs.

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal