Utilisez la commande EXPLAIN pour afficher le plan d'exécution d'une instruction SQL sans l'exécuter. Cette approche s'avère utile lors de l'optimisation des requêtes, par exemple pour vérifier si un index est exploité efficacement.
Moteurs et versions compatibles
La commande EXPLAIN est prise en charge par LindormTable et LindormTSDB.
Les options de profondeur du plan (
WITH TYPEetWITHOUT IMPLEMENTATION) nécessitent LindormTable version 2.6.3 ou ultérieure, ainsi que Lindorm SQL version 2.6.4 ou ultérieure. Pour consulter la version de votre instance Lindorm SQL, reportez-vous à la section Versions SQL.
Syntaxe
explain_statement ::= EXPLAIN [ PLAN ] [ explain_depth_expression ]
[ FOR ] select_statement;
explain_depth_expression ::= { WITH TYPE | WITHOUT IMPLEMENTATION }
Paramètres
Profondeur du plan
Le plan d'exécution renvoyé par la commande EXPLAIN comporte trois niveaux de profondeur. Utilisez l'expression optionnelle explain_depth_expression pour sélectionner le niveau souhaité.
| Profondeur | Expression | Cas d'utilisation |
|---|---|---|
| Plan physique | (aucune) | Optimisation générale des requêtes. Renvoie le plan entièrement optimisé après application des filtres par l'optimiseur. |
| Plan logique | WITHOUT IMPLEMENTATION |
Débogage de la structure de la requête avant optimisation. Renvoie le plan logique non optimisé. |
| Plan de type | WITH TYPE |
Inspection rapide des types de colonnes du jeu de résultats sans afficher le plan complet. Renvoie uniquement les types de chaque colonne du jeu de résultats. |
Instruction SELECT
Le paramètre select_statement correspond à la requête dont vous souhaitez visualiser le plan d'exécution.
Exemples
Les exemples suivants s'appuient sur la table ci-dessous :
CREATE TABLE test (
p1 VARCHAR(255) NOT NULL,
c1 VARCHAR(255),
PRIMARY KEY (p1)
);
Avec les données suivantes :
INSERT INTO test (p1, c1) VALUES
('3abc9378', '10'),
('3def9378', NULL),
('3ghi1234', '15'),
('3jkl5678', NULL),
('3mno9378', '20'),
('3pqr0000', '25'),
('3stu9378', '30'),
('3vwx0000', NULL),
('3yz_9378', '35'),
('3_1239378', '40');
Chacun des trois exemples exécute la commande EXPLAIN sur la même requête, mais avec un niveau de profondeur différent.
Afficher le plan physique
Cette commande renvoie le plan d'exécution optimisé. Privilégiez cette option pour la plupart des tâches d'optimisation de requêtes.
EXPLAIN SELECT POSITION('9378' IN p1) AS lp, COUNT(c1) FROM (SELECT * FROM test WHERE p1 like '3_%') GROUP BY lp ORDER BY lp;
Afficher le plan logique
Cette commande renvoie le plan logique non optimisé. Utilisez-la lorsque vous devez inspecter la structure brute de la requête avant sa réécriture par l'optimiseur.
EXPLAIN WITHOUT IMPLEMENTATION FOR SELECT POSITION('9378' IN p1) AS lp, COUNT(c1) FROM (SELECT * FROM test WHERE p1 like '3_%') GROUP BY lp ORDER BY lp;
Afficher le plan de type
Cette commande renvoie uniquement les types des colonnes du jeu de résultats. Elle permet une vérification rapide des types sans charger l'intégralité du plan.
EXPLAIN WITH TYPE FOR SELECT POSITION('9378' IN p1) AS lp, COUNT(c1) FROM (SELECT * FROM test WHERE p1 like '3_%') GROUP BY lp ORDER BY lp;