Maison  >  Article  >  base de données  >  Résumé de l'utilisation d'Explain dans MySQL (détaillé)

Résumé de l'utilisation d'Explain dans MySQL (détaillé)

不言
不言avant
2019-01-07 10:37:446246parcourir


Cet article vous apporte un résumé de l'utilisation d'Explain dans MySQL (détaillé). Il a une certaine valeur de référence, j'espère. cela vous sera utile.

Plan d'exécution (requête Plan d'exécution)

Syntaxe

explain select * from table

Expliquer Les informations dans la colonne

expain sont 10 columns,
sont id, select_type, table, type, partitions, possible_keys, key, key_len, ref, rows, Extra. Ce qui suit est une explication possible de l'occurrence de ces champs :

. 1. ID

Identification de l'ordre d'exécution de SQL, SQL est exécuté du grand au petit

1 Lorsque l'ID est le même, l'ordre d'exécution est de haut en bas.

2. S'il s'agit d'une sous-requête, le numéro de séquence de l'ID augmentera. Plus la valeur de l'ID est grande, plus la priorité est élevée et elle sera exécutée en premier

3. Si le Les identifiants sont les mêmes, ils peuvent être considérés comme un groupe et exécutés séquentiellement de haut en bas ; Dans tous les groupes, plus la valeur de l'ID est grande, plus la priorité est élevée et plus il est exécuté tôt

2. select_type

indique le type de chaque clause select dans la requête

1 SIMPLE : un simple SELECT, UNION ou une sous-requête n'est pas pratique.

2. PRIMAIRE : SÉLECTION la plus externe.

3. UNION : La deuxième couche utilise UNION après SELECT.

4. DEPENDENT UNION : Le deuxième SELECT dans l'instruction UNION dépend de la sous-requête externe.

5. RÉSULTAT DE L'UNION : Le résultat de l'UNION.

6. SOUS-REQUÊTE : Le premier SELECT de la sous-requête.

7. SOUS-REQUÊTE DÉPENDANTE : Le premier SELECT de la sous-requête dépend de la requête externe.

8. DERIVED : SELECT de la table dérivée (sous-requête de la clause FROM)

9. MATERIALIZED : sous-requête matérialisée

10. UNCACHEABLE SUBQUERY : les résultats ne peuvent pas être mis en cache. être recalculé pour chaque ligne de la requête externe

11. UNCACHEABLE UNION : UNION appartient à la deuxième sélection ou aux suivantes d'une sous-requête non cacheable

3. table

Le nom de la table référencée par la ligne de sortie. Cela peut également être l'une des valeurs suivantes :

  • M,N,...> : Cette ligne fait référence à l'union de la valeur d'identifiant M et de la valeur d'identifiant N.
  • N> : Cette ligne fait référence à la valeur N utilisée pour l'identifiant de résultat de la table dérivée de la ligne. Par exemple, une table dérivée peut provenir d'une sous-requête dans la clause FROM
  • N> : la ligne fait référence à l'id Le résultat de la sous-requête matérialisée pour la ligne avec la valeur N

4. type

représente la façon dont MySQL trouve la ligne requise dans la table, également appelée « type d'accès ».

Les types couramment utilisés sont : NULL, system, const, eq_ref, ref, range, index, ALL (de gauche à droite, performances du pire au meilleur)

La liste suivante décrit du meilleur type au Le pire type de connexion

NULL MySQL décompose l'instruction pendant le processus d'optimisation et n'a même pas besoin d'accéder à la table ou à l'index pendant l'exécution, par exemple. la valeur minimale d'une colonne d'index peut être effectuée lorsque la recherche d'index individuelle est terminée.

système Cette table ne comporte qu'une seule ligne (par exemple : table système). Il s'agit d'un cas particulier du type de jointure const

const La table a au plus une ligne correspondante, lue au début de la requête. Puisqu'il n'y a qu'une seule ligne, le reste de l'optimiseur peut traiter les valeurs des colonnes de cette ligne comme des constantes. Les tables const sont très rapides car elles ne sont lues qu'une seule fois.

SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;

eq_ref Pour chaque combinaison de lignes du tableau précédent, lisez une ligne de ce tableau. Outre les types system et const, c’est le meilleur type de connexion. Il est utilisé lorsque la jointure utilise toutes les parties de l'index et que l'index est un index PRIMARY KEY ou un index UNIQUE NOT NULL.

SELECT * FROM ref_table,other_table
  WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table
    WHERE ref_table.key_column_part1=other_table.column
    AND ref_table.key_column_part2=1;

ref représente la condition de correspondance de connexion du tableau ci-dessus, c'est-à-dire quelles colonnes ou constantes sont utilisées pour trouver la valeur sur la colonne d'index

fulltext utilise l'index FULLTEXT pour effectuer la jointure.

ref_or_null

SELECT * FROM ref_table WHERE key_column IS NULL;

index_merge La méthode d'accès par fusion d'index récupère les analyses de plage avec plusieurs lignes et fusionne leurs résultats en un seul. Cette méthode d'accès combine uniquement les analyses d'index à partir d'une seule table et n'analyse pas plusieurs tables. Une fusion peut produire une union, un croisement ou une union croisée de ses scans sous-jacents

SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;

SELECT * FROM tbl_name
WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;

SELECT * FROM t1, t2
WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')
AND t2.key1 = t1.some_col;

SELECT * FROM t1, t2
WHERE t1.key1 = 1
AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);

unique_subquery Ce type remplace certaines sous-requêtes IN par eq_ref de la forme :

value IN (SELECT primary_key FROM single_table WHERE some_expr)

index_subquery Ce type de connexion est similaire à unique_subquery. Elle remplace la sous-requête IN, mais elle fonctionne avec des index non uniques dans une sous-requête de la forme :

value IN (SELECT key_column FROM single_table WHERE some_expr)

range Pour récupérer uniquement les lignes dans une plage donnée, utilisez L'index sélectionne les lignes. La colonne clé dans la ligne de sortie indique quel index utiliser. Contient key_len pour contenir la partie clé qui a été utilisée le plus longtemps. La colonne ref NULL convient à ce type.
plage Lorsqu'une colonne clé utilise n'importe quelle valeur par rapport à une constante, vous pouvez utiliser =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, Opérateur LIKE ou IN() :

index Le type de jointure d'index est le même que ALL, sauf que l'arborescence d'index est analysée. Il existe deux situations :

1. L'arborescence d'index n'est analysée que si l'index est un index de couverture pour la requête et peut être utilisé pour satisfaire toutes les données requises dans la table. Dans ce cas, la colonne Extra indique Utilisation de l'index. Les analyses d'index uniquement sont généralement plus rapides que TOUS les index, qui sont généralement plus petits que les données de la table.

2. Effectuez une analyse complète de la table à l'aide de lectures à partir de l'index pour rechercher les lignes de données dans l'ordre de l'index. L’index des utilisations n’apparaît pas dans la colonne Extra. MySQL peut utiliser ce type de connexion lorsque la requête utilise uniquement des colonnes appartenant à un seul index.

TOUS
Effectuez une analyse complète du tableau pour chaque combinaison de lignes du tableau précédent. Généralement mauvais si la table est la première à ne pas être marquée const, et généralement très mauvaise dans tous les autres cas. En règle générale, vous pouvez TOUS éviter cela en ajoutant un index qui permet la récupération des lignes de la table en fonction d'une valeur constante ou d'une valeur de colonne d'une table antérieure. La colonne indique l'index que MySQL peut choisir pour rechercher les lignes de cette table. quel index MySQL peut utiliser pour trouver l'enregistrement dans la table. Si un index existe sur le champ impliqué dans la requête, l'index sera répertorié, mais il ne sera pas nécessairement utilisé par la requête

Cette colonne. est complètement indépendant de l’ordre des tableaux affichés dans la sortie EXPLAIN. Cela signifie que certaines clés de possible_keys ne peuvent pas réellement être utilisées dans l'ordre de la table générée. Si la colonne est NULL, il n'y a pas d'index associé. Dans ce cas, vous pouvez améliorer les performances de votre requête en vérifiant la clause WHERE pour voir si elle fait référence à certaines colonnes ou colonnes adaptées à l'indexation. Si tel est le cas, créez un index approprié et vérifiez à nouveau la requête avec EXPLAIN

6. Clé


La colonne clé affiche la clé (index) que MySQL a réellement décidé d'utiliser

Si aucun index n'est sélectionné, la clé est NULL. Pour forcer MySQL à utiliser ou ignorer l'index sur la colonne possible_keys, utilisez FORCE INDEX, USE INDEX ou IGNORE INDEX dans la requête.

7. key_len

indique le nombre d'octets utilisés dans l'index La longueur de l'index utilisé dans la requête peut être calculée via cette colonne (la valeur affichée. by key_len est le champ d'index. La longueur maximale possible n'est pas la longueur réelle utilisée, c'est-à-dire que key_len est calculé en fonction de la définition de la table, non extrait de la table)

Sans perte de précision, plus la longueur est courte , mieux c'est

8. ref

indique les conditions de correspondance de connexion du tableau ci-dessus, c'est-à-dire quelles colonnes ou constantes sont utilisées pour trouver la valeur sur l'index. colonne

9, lignes

indique que MySQL estime le nombre de lignes à lire pour trouver les enregistrements requis en fonction des statistiques de la table et de la sélection d'index

10. Extra

La sortie EXPLAIN de la colonne Extra contient des informations supplémentaires permettant à MySQL de résoudre la requête. La liste suivante décrit les valeurs possibles dans cette colonne. Chaque élément indique également à la sortie au format JSON quelle propriété affiche la valeur Extra. Pour certains d’entre eux, il existe une propriété spécifique. Autre texte affiché comme attribut de message

11. partitions (extension)

Enregistrez les partitions qui correspondront à la requête. Cette colonne s'affiche uniquement lors de l'utilisation du mot-clé PARTITIONS. La table non partitionnée affiche null

Cet article se termine ici Pour plus de connaissances sur MySQL, vous pouvez faire attention à la colonne Tutoriel MySQL sur le site Web php chinois ! ! !

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer