Maison > Article > base de données > Analyse de la commande EXPLAIN dans MySQL
explain montre comment mysql utilise index pour traiter les instructions de sélection et joindre des tables. Cela peut aider à choisir de meilleurs index et à écrire des instructions query plus optimisées.
Pour l'utiliser, ajoutez simplement expliquer avant l'instruction select :
Par exemple :
explain select surname,first_name form a,b where a.id=b.id
Explication de la colonne EXPLAIN :
table : indique la table sur laquelle porte cette ligne de données.
type : il s'agit d'une colonne importante, indiquant le type de connexion utilisé. Les types de jointure du meilleur au pire sont const, eq_reg, ref, range, indexhe et ALL
possible_keys : affiche les index qui peuvent être appliqués à cette table. S'il est vide, aucun index n'est possible. Une instruction appropriée peut être sélectionnée dans l'instruction WHERE pour le domaine concerné
clé : l'index réel utilisé. Si NULL, aucun index n'est utilisé. Rarement, MYSQL sélectionnera un index sous-optimisé. Dans ce cas, vous pouvez utiliser USE INDEX (nom de l'index) dans l'instruction SELECT pour forcer l'utilisation d'un index ou IGNORE INDEX (nom de l'index) pour forcer MYSQL à ignorer l'index
key_len : la longueur de l'index utilisé . Plus la longueur est courte mieux c'est sans perdre en précision
ref : Montre quelle colonne de l'index est utilisée, si possible, une constante
lignes : MYSQL juge nécessaire de vérifier le nombre de lignes utilisées pour renvoyer les données demandées
Extra : informations supplémentaires sur la façon dont MYSQL analyse la requête. Sera discuté dans le tableau 4.3, mais les mauvais exemples que l'on peut voir ici sont l'utilisation de fichiers temporaires et l'utilisation de fichiers, ce qui signifie que MYSQL ne peut pas du tout utiliser l'index, et le résultat est que la récupération sera très lente
Description de retour de colonne supplémentaire Signification de
Distinct : Une fois que MYSQL trouve une ligne qui correspond à l'union de lignes, il ne la recherche plus
N'existe pas : MYSQL optimise LEFT JOIN une fois qu'il trouve une correspondance, les lignes standard LEFT JOIN ne sont plus recherchées
Plage vérifiée pour chaque enregistrement (carte d'index : #) : l'index idéal n'est pas trouvé, donc pour chaque combinaison de lignes de la table précédente, MYSQL vérifie quel index à utiliser et utilisez-le pour renvoyer des lignes de la table. C'est l'une des connexions les plus lentes utilisant un index
Utilisation du tri de fichiers : lorsque vous voyez cela, la requête doit être optimisée. MYSQL nécessite une étape supplémentaire pour découvrir comment trier les lignes renvoyées. Il trie toutes les lignes en fonction du type de connexion et des pointeurs de ligne qui stockent la valeur de la clé de tri et toutes les lignes correspondant à la condition
Utilisation de l'index : les données de colonne sont obtenues en utilisant simplement les informations de l'index sans lire le contenu réel. action La table est renvoyée. Cela se produit lorsque toutes les colonnes demandées de la table font partie du même index
Utilisation de temporaire Lorsque vous voyez cela, la requête doit être optimisée. Ici, MYSQL doit créer une table temporaire pour stocker les résultats. Cela se produit généralement lorsque ORDER BY est effectué sur différents ensembles de colonnes au lieu de
Where used utilise une clause WHERE pour limiter les lignes à comparer. avec la table suivante correspond ou est renvoyé à l'utilisateur. Cela peut arriver si vous ne souhaitez pas renvoyer toutes les lignes de la table et que le type de jointure est ALL ou index, ou s'il y a un problème avec la requête Explication des différents types de jointure (triés par ordre d'efficacité)
.
system La table n'a qu'une seule ligne : table système. Il s'agit d'un cas particulier du type de jointure const
const : la valeur maximale d'un enregistrement de la table pouvant correspondre à cette requête (l'index peut être une clé primaire ou un index unique). Comme il n'y a qu'une seule ligne, cette valeur est en fait une constante, car MYSQL lit d'abord cette valeur puis la traite comme une constante
eq_ref : Dans la connexion, MYSQL interrogera chaque enregistrement de la table précédente La jointure lit un enregistrement de la table. Il est utilisé lorsque la requête utilise la totalité de la clé primaire ou de la clé unique de l'index
ref : Ce type de connexion n'est utilisé que lorsque la requête utilise une clé qui n'est pas unique ou. clé primaire ou est-ce que ces types de sections (par exemple, en utilisant le préfixe le plus à gauche) se produisent. Pour chaque jointure de ligne de la table précédente, tous les enregistrements seront lus à partir de la table. Ce type dépend fortement du nombre d'enregistrements correspondant en fonction de l'index - moins il y en a, mieux c'est
plage : ce type de jointure utilise l'index pour renvoyer une plage de lignes, comme ce qui se passe lors de la recherche de quelque chose en utilisant > ; ou < 🎜>
index : Ce type de connexion effectue une analyse complète de chaque union d'enregistrements dans la table précédente (mieux que ALL, car l'index est généralement plus petit que les données de la table)
ALL : Ce type de connexion effectue une analyse complète de chaque enregistrement du tableau précédent. Chaque enregistrement est combiné pour une analyse complète, ce qui est généralement mauvais et doit être évité
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!