Maison > Article > base de données > Quel est le plan d'exécution dans MySQL
Dans MySQL, le plan d'exécution est un ensemble d'outils fournis par la base de données aux utilisateurs pour analyser, analyser et optimiser les instructions SQL. Les fonctions du plan d'exécution sont : 1. Afficher l'ordre de lecture de la table ; 2. Le type d'opération de lecture des données ; 3. Afficher les index pouvant être utilisés ; 4. Afficher les index réellement utilisés ; La relation de référence entre eux ; 6. Afficher le nombre de lignes interrogées dans chaque table.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Lors de l'interrogation de la base de données, nous utilisons généralement des instructions SQL pour interroger les données dont nous avons besoin. Cependant, nous ne savons pas comment SQL est exécuté dans la base de données, s'il utilise des index, quels index sont utilisés, quels champs et tables sont recherchés, quel est leur ordre, combien de temps ils prennent, etc. Comment voir ces informations ? MySQL nous fournit un ensemble d'outils - des plans d'exécution.
Le plan d'exécution est un ensemble d'outils fournis par la base de données pour analyser, analyser et optimiser les instructions SQL. Il a les fonctions suivantes :
Afficher la séquence de lecture du tableau.
Type d'opération de lecture de données ;
Quels index peuvent être utilisés ;
Quels sont les index réellement utilisés ; de lignes interrogées pour chaque tableau.
Remarque : Le plan d'exécution n'est que le meilleur plan de référence d'optimisation donné par la base de données pour SQL, et ce n'est pas nécessairement la solution optimale, c'est-à-dire
Ne faites pas trop confiance au plan d'exécutionUtilisation Le plan d'exécution est très simple, il suffit d'ajouter le mot-clé expliquer devant le SQL à exécuter.
3. Informations sur le plan d'exécutionsélectionnez le numéro de série de la requête, l'identifiant est le même, l'ordre d'exécution est de haut en bas ; est exécuté ;
3.2, select_type
select_type : Représente le type d'instruction select, qui peut avoir les valeurs suivantes
SIMPLE : Représente une requête simple, qui n'inclut pas de requête de connexion et de ⼦ requête ;
PRIMARY : représente la requête principale ou l'instruction de requête la plus externe ;
UNION : représente la deuxième instruction de requête ou suivante de la requête de connexion ;
DEPENDENT UNION : la deuxième instruction SELECT ou suivante ; dans UNION, dépend de la requête externe ;
UNION RESULT : Le résultat de la requête de jointure ;
SOUS-REQUÊTE : ⼦La 1ère instruction SELECT de la requête ;
SOUS-REQUÊTE DÉPENDANTE : ⼦La 1ère SELECT instruction dans la requête, en fonction de la requête externe ;
DERIVED : SELECT (sous-requête de la clause FROM).
Affiche le nom de la table, si un alias est donné, l'alias est affiché ;
3.5, type
type : Cette colonne représente le type d'association de table ou le type d'accès, c'est-à-dire que la base de données détermine comment trouver les lignes dans la table et la plage approximative des enregistrements de lignes de données. Du meilleur au pire, ce sont : system > const > eq_ref > range > all
system : Il n'y a qu'une seule ligne d'enregistrements dans la table, ce qui équivaut à la table système, qui est de type const. Les colonnes spéciales n'apparaissent généralement pas et peuvent être ignorées
const : un accès à l'index, correspondant à une ligne de données, il est donc souvent utilisé dans ; requêtes d'index PRIMARY KEY ou UNIQUE. On peut comprendre que const est l'optimisation ;
eq_ref : Analyse d'index unique, pour chaque clé d'index, un seul enregistrement dans la table lui correspond, clé primaire couramment utilisée ou analyse d'index unique. , c'est peut-être le meilleur type de jointure en plus de const ;
ref : analyse d'index non unique, renvoie toutes les lignes correspondant à une seule valeur, utilisée pour les colonnes indexées avec les opérateurs =,
range : récupérez uniquement les lignes d'une plage donnée, utilisez un index pour sélectionner les lignes, généralement utilisé pour les requêtes telles que entre, , dans, etc. Cette requête de plage est meilleure que l'index car elle n'a besoin que de scanner l'index Un point qui se termine à un autre point ;
index : l'arbre d'index doit être parcouru ;
all : une analyse complète de la table, ce qui signifie que la base de données doit trouver ce dont elle a besoin du début à fin. Cela nécessite généralement l'ajout d'index pour l'optimisation.
Remarque : lors de l'optimisation de SQL, vous devez optimiser au moins au moins la plage, et il est recommandé d'optimiser pour ref, de préférence const.
3.6, possible_keys
possible_keys : Cette colonne indique quels index peuvent être utilisés par la requête pour rechercher. Lors de l'explication, il peut arriver que possible_keys ait une colonne, mais que la clé affiche NULL. Cela est dû au fait qu'il n'y a pas beaucoup de données dans la table et que la base de données pense que l'index n'est pas utile pour cette requête, elle choisit donc un index complet. requête de table.
Si la colonne est NULL, il n'y a pas d'index associé. Dans ce cas, vous pouvez vérifier la clause Where pour voir si vous pouvez créer un index approprié pour améliorer les performances des requêtes, puis utiliser expliquer pour voir l'effet.
3.7, key
key : Affiche la clé (index) qui est réellement décidée à utiliser dans la base de données . Si aucun index n'est sélectionné, la valeur de key est NULL. Les index peuvent être forcés à être utilisés ou ignorés.
3.8, key_len
key_len : Cette colonne indique le nombre d'octets utilisés par la base de données dans l'index Grâce à cette valeur, vous pouvez calculer quelles colonnes de l'index sont spécifiquement utilisées. Le calcul numérique est le suivant :
.Type de chaîne
char(n) : longueur de n octets
varchar(n) : longueur de chaîne de stockage de 2 octets, si elle est utf-8, la longueur est 3n + 2
Type numérique
tinyint : 1 octet
smallint : 2 Octets
int : 4 octets
bigint : 8 octets
type d'heure
date : 3 octets
horodatage : 4 octets
datetime : 8 octets
Si le champ autorise NULL, 1 octet est requis pour enregistrer si Est NULL
Remarque : La longueur maximale de l'index est de 768 octets. Lorsque la chaîne est trop longue, la base de données effectuera un processus similaire à l'index du préfixe gauche et extraira la première moitié des caractères pour l'indexation.
3.9, ref
ref : Cette colonne montre la colonne ou la constante que la table recherche la valeur dans l'index de l'enregistrement de la colonne clé. Les plus courantes sont : const (constante), func, null , nom du champ (exemple : film.id)
3.10, lignes
lignes : Cette colonne est le nombre estimé à être lu et scanné par la base de données . ensemble de résultats. Par conséquent, plus la valeur est petite, mieux c’est.
3.11, filtré
filtré : le nombre de lignes renvoyées en conséquence représente le pourcentage du nombre de lignes lues, plus la valeur est grande, mieux c'est.
3.12, Extra
extra : Cette colonne affiche desinformations supplémentaires, c'est-à-dire des informations non incluses dans d'autres colonnes. Les valeurs spécifiques sont les suivantes :
utiliser des index pour optimiser ;
select utilise un index de couverture sans avoir à revenir à la table pour interroger ; trier par et regrouper par. Lorsque cela se produit, une optimisation doit généralement être effectuée. La première chose à faire est d'utiliser un index pour optimiser
en utilisant la condition d'index : similaire à Using ; où, la colonne interrogée n'est pas complètement couverte par l'index, et la condition Where est la plage d'une colonne de début
using index for group-by : similaire à la méthode Using index pour accéder à une table, Using index for group-by signifie que la base de données a trouvé un index qui peut être utilisé pour interroger toutes les colonnes du groupe by ou des requêtes distinctes sans recherche supplémentaire sur le disque dur pour accéder à la table réelle ;
null : la colonne interrogée n'est pas couverte par l'index et la condition de filtre Where est la première colonne de l'index, ce qui signifie que l'index est utilisé, mais certains les champs ne sont pas couverts par l'index et doivent être renvoyés à la table via " "Pour y parvenir, l'index n'est pas purement utilisé, et l'index n'est pas non plus utilisé du tout. Même si l'index est utilisé mais qu'une opération de retour de table est requise, l'opération de retour de table doit être évitée.
【Recommandations associées : 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!