Maison  >  Article  >  base de données  >  Explication détaillée de l'utilisation d'explain dans l'apprentissage MySQL

Explication détaillée de l'utilisation d'explain dans l'apprentissage MySQL

WBOY
WBOYavant
2022-03-07 16:56:132420parcourir

Cet article vous apporte des connaissances pertinentes sur mysql, qui présente principalement des problèmes liés à l'explication. La commande expliquer est principalement utilisée pour vérifier le plan d'exécution de l'instruction SQL et vérifier si l'instruction SQL utilise des index. j'espère que cela aide tout le monde.

Explication détaillée de l'utilisation d'explain dans l'apprentissage MySQL

Apprentissage recommandé : Tutoriel mysql

La commande expliquer est principalement utilisée pour vérifier le plan d'exécution de l'instruction SQL, vérifier si l'instruction SQL utilise des index, si une analyse complète de la table est effectuée, etc. Il peut simuler l'optimiseur pour exécuter des instructions de requête SQL afin de savoir comment MySQL gère les instructions SQL des utilisateurs.

1. Ce que l'explication peut faire

 Grâce à l'instruction expliquer, nous pouvons analyser les résultats suivants

Description récapitulative :
L'ordre de lecture de la table Le type d'opération de lecture des données
Références entre tables Quels index peuvent être utilisés ?
Combien de lignes de chaque table sont interrogées par l'optimiseur ? table, type, possible_keys, key, key_len, ref, rows, Extra

Champ

description

id

identifiant

select_typeLe type de requêteLa table qui génère le jeu de résultats
table
type Le type de connexion de la table
possible_keys Index pouvant être utilisés lors de l'interrogation
key Index actuellement utilisé
key_len La longueur du champ d'index
ref Comparaison des colonnes et des index
rows Nombre de lignes analysées (nombre estimé de lignes)
Extra Description et explication de l'exécution

3. Expliquez la signification de chaque champ

3.1 id

id est le numéro de séquence de la requête de sélection, comprenant un ensemble de chiffres, indiquant l'ordre dans lequel la clause de sélection ou la table d'opérations est exécuté dans la requête. Les résultats de id ont les trois situations suivantes : id是select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。id的结果有以下三种情况:

  ● id 相同,执行顺序由上至下,与sql中顺序无关

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  ● 如果是子查询,id的序号会递增,id越大优先级越高,越先被执行

  ● id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中id值越大,优先级越高,越先执行。

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL


3.2 select_type

  select_type显示示查询中每个select子句的类型,常用的select_type的类型有simple、primary、subquery、derived、union、union result

  (1) simple (简单select,不使用union或子查询等任何复杂查询)

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  (2) primary (子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为primary)

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  (3) subquery (在select或where列表中包含了子查询)

  (4) derived (在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表中)

  (5) union (union中的第二个或后面的select语句)

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  (6) union result (union的结果,union语句中第二个select开始后面所有select)

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL


3.3 table

  table显示这一步所访问数据库中表名称 (显示这一行的数据是关于哪张表的)。


3.4 type

  type所显示的是查询使用了哪种类型,type包含的类型有all、index、range、ref、eq_ref、const、system、NULL,它的性能依次递增。

  ● all :Full Table Scan, MySQL将遍历全表以找到匹配的行

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  ● index : Full Index Scan,index与ALL区别为index类型只遍历索引树

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  ● range:只检索给定范围的行,使用一个索引来选择行

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  ● ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  ● eq_ref : 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

  ● const、system : 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下使用system。

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

  ● NULL : MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。


3.5 possible_keys

  possible_keys greep L'id est le même, l'ordre d'exécution est de haut en bas, quel que soit l'ordre dans sql

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL🎜🎜 ● S'il s'agit d'une sous-requête, le numéro de série de l'identifiant sera incrémenté. Plus l'identifiant est grand , plus la priorité est élevée et plus il sera exécuté tôt🎜🎜🎜🎜 Quantity id S'il est identique, il peut être considéré comme un groupe, de haut en bas. Exécution dans l'ordre suivant dans tous les groupes, plus la valeur de l'identifiant est grande, plus la priorité est élevée et plus il est exécuté tôt ; 🎜🎜Insérer la description de l'image ici🎜🎜🎜3.2 select_type🎜 🎜 select_type affiche le type de chaque clause select dans la requête. Les types select_type couramment utilisés incluent simple , primaire, sous-requête, dérivé, union, union result🎜🎜 (1) 🎜simple🎜 (sélection simple, sans utiliser toute requête complexe telle qu'une union ou une sous-requête)🎜🎜image- 20210419152207657🎜🎜 (2) 🎜primary🎜 (La requête la plus externe dans la sous-requête, si la requête contient des sous-parties complexes, la sélection la plus externe est marquée comme primaire)🎜🎜 Image-20210419152451499 🎜🎜  (6) 🎜union result🎜 (Le résultat de l'union, le la deuxième sélection dans la déclaration syndicale commence par toutes les sélections suivantes)🎜🎜image- 20210419154049799🎜🎜🎜3.3 table🎜🎜 tableAffiche le nom de la table dans la base de données consultée à cette étape (affiche à quelle table les données de cette ligne font référence). 🎜🎜🎜3.4 type🎜🎜 type indique quel type est utilisé dans la requête. Le type inclut all, index, range, ref, eq_ref, const, system et NULL. Ses performances augmentent. 🎜🎜 Quantity 🎜all🎜 : Analyse complète de la table, MySQL parcourra toute la table pour trouver les lignes correspondantes🎜🎜Explication détaillée de lutilisation dexplain dans lapprentissage MySQL🎜🎜 Quantity 🎜index🎜 : Analyse complète de l'index, la différence entre index et ALL est que le type d'index ne traverse que l'arborescence d'index🎜🎜Insérer la description de l'image ici🎜🎜 Quantity 🎜ref🎜 : signifie les conditions de correspondance de jointure du tableau ci-dessus, c'est-à-dire quelles colonnes ou constantes sont utilisées pour trouver la valeur sur la colonne d'index🎜🎜Explication détaillée de lutilisation dexplain dans lapprentissage MySQL🎜🎜 Quantity 🎜eq_ref🎜 : Semblable à ref, la différence est que l'index utilisé est un index unique. Pour chaque index clé valeur, un seul enregistrement dans la table correspond. Pour faire simple, c'est-à-dire en utilisant une clé primaire ou une clé unique comme condition d'association dans les connexions multi-tables 🎜🎜 Quantity 🎜const, system🎜 : lorsque MySQL optimise une certaine partie de la table. requête et la convertit en constante, utilisez ces types pour l'accès. Si la clé primaire est placée dans la liste Where, MySQL peut convertir la requête en constante. System est un cas particulier du type const. Utilisez system lorsque la table interrogée n'a qu'une seule ligne. 🎜🎜Explication détaillée de lutilisation dexplain dans lapprentissage MySQL🎜🎜 ● 🎜NULL 🎜 : MySQL Les instructions sont décomposées lors de l'optimisation et exécutées sans même accéder aux tables ou aux index. Par exemple, la sélection de la valeur minimale dans une colonne d'index peut être effectuée par une recherche d'index distincte. 🎜🎜🎜3.5 possible_keys🎜🎜 possible_keysAffiche un ou plusieurs index pouvant être appliqués à cette table. Si un index existe sur le champ impliqué dans la requête, l'index sera répertorié, mais ne pourra pas être réellement utilisé par la requête. (Les index que cette requête peut utiliser, s'il n'y a pas d'index, elle affichera null) 🎜

3.6 key

key affiche la clé (index) que MySQL décide réellement d'utiliser, qui doit être incluse dans possible_keys. NULL si aucun index n’est sélectionné. 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. key显示MySQL实际决定使用的键(索引),必然包含在possible_keys中。如果没有选择索引,则是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用force indexuse index 或者 ignore index


3.7 key_len

  key_len表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的),在不损失精确性的情况下,长度越短越好

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL


3.8 ref

  ref显示索引的那一列被使用,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL


3.9 rows

  rows估算出结果集的行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL


3.10 Extra

  Extra

3.7 key_len

key_len représente 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 par key_len est le maximum possible. longueur du champ d'index, 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. Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

3.8 ref

  refAffiche quelle colonne de l'index est utilisée, indiquant 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 la colonne d'index

Explication détaillée de lutilisation dexplain dans lapprentissage MySQL

3,9 lignes  lignes code> Lignes de l'ensemble de résultats estimé Le nombre indique que MySQL estime le nombre de lignes qui doivent être lues pour trouver les enregistrements requis en fonction des statistiques de la table et de la sélection de l'index.

Insérer la description de l'image ici

3.10 Extra

ExtraCette colonne contient des informations détaillées sur la résolution des requêtes MySQL. Il existe les situations suivantes :

 Lorsque les colonnes demandées font toutes partie du même index, cela signifie que le serveur MySQL récupérera la ligne après la moteur de stockage Ensuite, filtrez

 gird

Utiliser temporaire

signifie que MySQL doit utiliser une table temporaire pour stocker l'ensemble de résultats, ce qui est courant dans le tri et le regroupement des requêtes Common group order by; La requête contient l'ordre par opération, et les opérations de tri qui ne peuvent pas être effectuées à l'aide d'index sont appelées « tri de fichiers »

 greep

Utilisation du tampon de jointure

La valeur modifiée souligne que l'index n'est pas utilisé lors de l'obtention de la condition de jointure, et une jointure un tampon est nécessaire pour stocker les résultats intermédiaires. Si cette valeur apparaît, sachez qu'en fonction des conditions spécifiques de la requête, vous devrez peut-être ajouter un index pour améliorer les performances.

 Quantity

Impossible Where

Cette valeur souligne que l'instruction Where ne donnera lieu à aucune ligne répondant à la condition (le résultat est impossible à exister en collectant des statistiques).

  gird Sélectionnez les tables optimisées Cette valeur signifie qu'en utilisant uniquement l'index, l'optimiseur ne peut renvoyer qu'une seule ligne du résultat de la fonction d'agrégation

🎜  gird 🎜Aucune table utilisée Requête🎜 Instruction utilisant from dual ou sans aucune clause from 🎜 🎜🎜 IV. Résumé 🎜🎜 Quantity Explication ne vous donnera pas d'informations sur les déclencheurs, les procédures stockées ou l'impact des fonctions définies par l'utilisateur sur les requêtes 🎜🎜  Explication ne prend pas en compte les différents caches 🎜🎜  Explication ne peut pas afficher l'exécution de MySQL Le travail d'optimisation effectué pendant la requête🎜🎜 Quantity expliquer ne peut expliquer que l'opération de sélection, les autres opérations doivent être réécrites pour afficher le plan d'exécution après la sélection🎜🎜  ● Certaines informations statistiques sont estimées, pas une valeur exacte🎜🎜Apprentissage recommandé : 🎜Tutoriel vidéo MySQL🎜 🎜

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