Maison > base de données > tutoriel mysql > MySQL Advanced 13 - Optimiser SQL via des index

MySQL Advanced 13 - Optimiser SQL via des index

黄舟
Libérer: 2016-12-29 16:55:55
original
1297 Les gens l'ont consulté

1. Présentation

Arbre binaire——> Fichier d'index : efficacité log2N

Récupérer 10 fois : 2 à la puissance 10. 1024 enregistrements.

Surcharge causée par l'index

En regardant les fichiers de données (répertoire de données sous le répertoire d'installation), vous trouverez trois fichiers,

.frm : représentant la structure du table

.myd : représente les données

.myi : représente les fichiers indexés

Problèmes causés par l'index : cela entraînera l'efficacité de l'insertion, de la mise à jour et de la suppression

Les champs fréquemment mis à jour ne conviennent pas à la création d'index.

Les champs avec un caractère unique médiocre ne conviennent pas à la création d'index. Par exemple, seulement si le sexe d'une personne est masculin ou féminin

et remplit les conditions suivantes, un index sera créé

1. Il doit être souvent utilisé dans la condition où.

2. Ce champ ne changera pas trop fréquemment.

2. Scénarios d'utilisation de l'index

1. Trouvez rapidement les enregistrements qui répondent à la condition Where.

2. Déterminez rapidement l’ensemble des candidats. Si la condition Where utilise plusieurs champs d'index, MySQL donnera la priorité à l'utilisation de l'index capable de minimiser la taille de l'ensemble candidat afin d'éliminer au plus vite les enregistrements qui ne remplissent pas les conditions.

3. S'il existe un index conjoint composé de plusieurs champs dans la table, lors de la recherche d'enregistrements, le champ correspondant au préfixe le plus à gauche de l'index conjoint sera également automatiquement utilisé comme index pour accélérer la recherche.

Par exemple : Si trois index sont créés pour une table, un index joint composé de (c1, c2, c3), alors (c1), (c1, c2), (c1, c2, c3) sont all sera utilisé comme index, (c2, c3) ne sera pas utilisé comme index et (c1, c3) n'utilise en fait que l'index c1.

4. Les index seront utilisés lors de la jointure de plusieurs tables (si les champs participant à la jointure sont indexés dans ces tables)

5. Si un champ a été indexé, veuillez lors de l'exécution du tri ou. opérations de groupe sur ce champ, MySQL utilisera l'index.

3. Plan d'exécution de SQL inefficace via l'analyse EXPLAIN

Par exemple :

mysql> explain select * from taxgrouptaxes\G  
*************************** 1. row ***************************  
           id: 1  
  select_type: SIMPLE  
        table: taxgrouptaxes  
         type: ALL  
possible_keys: NULL  
          key: NULL  
      key_len: NULL  
          ref: NULL  
         rows: 1  
        Extra:
Copier après la connexion

select_type : indique le type de SELECT,

common Le les valeurs sont

SIMPLE : table simple, qui n'utilise pas de jointures de table ni de sous-requêtes

PRIMARY : requête principale, la requête externe

union : dans UNION La deuxième ou instruction de requête suivante

SUBQUERY : la première sélection dans la sous-requête

table : la table qui génère le jeu de résultats

type indique que MYSQL est dans la table. la ligne requise. Ou appelé type d'accès.

Les types courants sont les suivants : 🎜>
const,system

null

De haut en bas, les performances vont du pire au meilleur.

1 : type = analyse complète de toutes les tables.

2 : type=analyse de la plage d'index

3 : type=analyse de la plage d'index tange. Couramment utilisé dans des opérations telles que <= > >= between

4 : type=ref s utilise une analyse d'index unique ou une analyse de préfixe d'un index unique.

5 : type=eq_ref est similaire à ref. La différence est que l'index utilisé est un index unique. Pour chaque valeur de clé d'index, un seul enregistrement de la table correspond.

6 : type=const/system Il y a au plus une ligne correspondante dans une seule table et la requête est très rapide.

7 : type=null MYSQL n'a pas besoin d'accéder aux tables ou aux index. Vous pouvez obtenir les résultats directement.

possible_keys : Indique les index pouvant être utilisés dans la requête

key : Indique l'index réel utilisé

key_len : La longueur du champ d'index utilisé

lignes : Nombre de lignes de scan

Extra : Explication et scan de l'exécution. L'inclusion d'autres colonnes qui ne rentrent pas dans l'affichage est importante pour le plan d'exécution.

4. Analysez SQL via show profile

1. Vérifiez d'abord si MySQL prend en charge show profile


2. instruction pour ouvrir le profil au niveau de la session


3. Après l'exécution, vous pouvez afficher l'ID de requête du SQL actuel via l'instruction show profiles.

4. Utilisez show profile pour la requête queryID

Ce qui précède est le contenu de MySQL Advanced 13 - Optimisation de SQL via l'indexation Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www. .php.cn ) !

mysql> select @@have_profiling;
+------------------+
| @@have_profiling |
+------------------+
| YES              |
+------------------+
1 row in set (0.00 sec)
Copier après la connexion

Étiquettes associées:
source:php.cn
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