Maison > Article > base de données > Explication détaillée de l'utilisation d'explain dans l'apprentissage MySQL
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.
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.
Grâce à l'instruction expliquer, nous pouvons analyser les résultats suivants
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 | Description récapitulative : |
description
ididentifiantselect_type
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 champ3.1 id ● id 相同,执行顺序由上至下,与sql中顺序无关 ● 如果是子查询,id的序号会递增,id越大优先级越高,越先被执行 ● id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中id值越大,优先级越高,越先执行。 3.2 select_type (1) simple (简单select,不使用union或子查询等任何复杂查询) (2) primary (子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为primary) (3) subquery (在select或where列表中包含了子查询) (4) derived (在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表中) (5) union (union中的第二个或后面的select语句) (6) union result (union的结果,union语句中第二个select开始后面所有select) 3.3 table 3.4 type ● all :Full Table Scan, MySQL将遍历全表以找到匹配的行 ● index : Full Index Scan,index与ALL区别为index类型只遍历索引树 ● range:只检索给定范围的行,使用一个索引来选择行 ● ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 ● eq_ref : 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件 ● const、system : 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下使用system。 ● NULL : MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。 3.5 possible_keys 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)🎜🎜🎜🎜 (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)🎜🎜🎜🎜 (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)🎜🎜🎜🎜🎜3.3 table🎜🎜 table Affiche 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🎜🎜🎜🎜 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🎜🎜🎜🎜 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🎜🎜🎜🎜 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. 🎜🎜🎜🎜 ● 🎜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_keys Affiche 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 3.7 key_len 3.8 ref 3.9 rows 3.10 Extra 3.7 key_len 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
3,9 lignes 3.10 Extra girdUtiliser temporairesignifie 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 jointureLa 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 WhereCette 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!