Afficher le plan d’execution d’une requête MySql
Mysql offre la possibilité d’afficher à l’utilisateur le plan d’exécution pour une requête données. Pour cela, il suffit de précéder la requête à analyser de l’instruction EXPLAIN.
Ainsi utilisé, MySql affiche en résultat à l’utilisateur un tableau permettant de détailler comment l’optimiseur de requête va exécuter celle-ci. C’est ce qu’on appelle le plan d’exécution. Le tableau affiché en résultat peu contenir de 1 à plusieurs lignes.
Dans le cas d’une requête simple, ce tableau contiendra une ligne.
Dans le cas d’une requête contenant deux instructions SELECT associées avec la clause UNION, le tableau contiendra trois lignes :
- une ligne pour chaque exécution de l’instruction SELECT,
- une ligne pour le résultat de l’instruction UNION
Le tableau affiché contient les colonnes suivantes :
- id : L’identifiant de l’instruction SELECT. Correspond au numéro de l’instruction SELECT au sein de la requête. Est utilisé dans le cas où l’optimiseur va effectuer plusieurs instructions SELECT (comme dans l’utilisation de la clause UNION par exemple),
- select_type : le type d’instruction SELECT que l’optimiseur va exécuter. Les différents types sont :
- SIMPLE : exécution d’une instruction SELECT simple (par de select imbriqué ou de clause UNION)
- PRIMARY : SELECT principal dans une requête avec des instructions select imbriquées
- UNION : seconde ou dernière instruction SELECT d’une requête contenant la clause UNION
- DEPENDANT UNION : seconde ou dernière instruction SELECT d’une requête contenant la clause UNION qui dépend d’une requête externe
- UNION RESULT : le résultat de la clause UNION (après exécution de l’ensemble des instructions SELECT)
- SUBQUERY : première instruction SELECT dans une requête contenant des select imbriqués
- DERIVED : résultat de l’instruction SELECT d’une requête imbriquée dans la clause FROM
- table : le nom de la table contenant les lignes retournées par la clause SELECT de la requête
- type : le type de jointure utilisé sur la table dans la requête
- possible_keys : cette colonne indique les index que MySQL peut utiliser pour trouver les lignes utiles dans la tables
- key : cette colonne indique l’index que MySQL a décidé d’utiliser. La valeur de cette colonne vaut NULL si MySQL n’a pas utilisé d’index.
- key_len : cette colonne indique la longueur de l’index que MySQL a décidé d’utiliser.
- ref : cette colonne affiche qu’elles colonnes de la table ou constantes ont été comparées à l’index afin de trouver les lignes utiles dans la table
- rows : cette colonne affiche le nombre de lignes de la table que MySQL devra exéminer pour exécuter cette partie de la requête
- extra : cette colonne affiche des informations supplémentaires sur la manière utilisée par MySQL pour résoudre la requête
L’utilisation du plan d’exécution est indispensable afin de comprendre comment MySQL exécute une requête et ainsi optimiser les performances. Cette instruction vous permet notamment d’identifier si la requête utilise des index ou pas.
