- Catégories :
SYSTEM$EXPLAIN_PLAN_JSON¶
Étant donné le texte d’une instruction SQL, cette fonction génère le plan EXPLAIN au format JSON.
- Voir aussi :
Syntaxe¶
SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
Arguments¶
sql_statement_expression
Chaîne ou expression dont le résultat est une chaîne, contenant l’instruction SQL pour laquelle vous souhaitez le plan EXPLAIN . Si une chaîne littérale est utilisée, elle doit être entourée de guillemets simples
'
.sql_query_id_expression
Chaîne ou expression dont le résultat est une chaîne, contenant l’ID de requête pour lequel vous souhaitez le plan EXPLAIN . Si une chaîne littérale est utilisée, elle doit être entourée de guillemets simples
'
.
Renvoie¶
La fonction renvoie un VARCHAR contenant la sortie EXPLAIN dans un format compatible avec JSON.
Notes sur l’utilisation¶
Si un littéral de chaîne est validé en entrée, le délimiteur autour de la chaîne peut être soit un guillemet simple
'
soit un double signe dollar$$
. Si le littéral de chaîne contient des guillemets simples (et ne contient pas de signes dollar double), la délimitation de la chaîne avec des signes dollar double évite d’avoir à échapper les caractères de guillemet simple incorporés à l’intérieur de la chaîne.Pour post-traiter la sortie de cette commande, vous pouvez :
Utiliser la fonction RESULT_SCAN , qui traite la sortie comme une table qui peut être interrogée.
Insérez la sortie au format JSON dans une table pour une analyse ultérieure. Si vous stockez la sortie au format JSON, vous pouvez utiliser la fonction SYSTEM$EXPLAIN_JSON_TO_TEXT ou EXPLAIN_JSON pour convertir le JSON dans un format plus lisible par l’homme (texte tabulaire ou formaté).
Exemples¶
Ces exemples utilisent les tables ci-dessous :
CREATE TABLE Z1 (ID INTEGER); CREATE TABLE Z2 (ID INTEGER); CREATE TABLE Z3 (ID INTEGER);
Cet exemple utilise une chaîne littérale contenant une instruction n SQL comme paramètre d’entrée :
SELECT SYSTEM$EXPLAIN_PLAN_JSON( 'SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID' ) AS explain_plan; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPLAIN_PLAN | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | {"GlobalStats":{"partitionsTotal":2,"partitionsAssigned":2,"bytesAssigned":1024},"Operations":[[{"id":0,"operation":"Result","expressions":["Z1.ID","Z2.ID"]},{"id":1,"parentOperators":[0],"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parentOperators":[1],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parentOperators":[1],"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parentOperators":[3],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z1"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512}]]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Utilisez $$
pour délimiter les requêtes contenant des guillemets simples :
SELECT SYSTEM$EXPLAIN_PLAN_JSON( $$ SELECT symptom, IFNULL(diagnosis, '(not yet diagnosed)') FROM medical $$ );
Le code ci-dessous montre comment consulter le plan EXPLAIN pour une requête que vous avez déjà exécutée :
Exécutez la requête :
SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID;Exécutez EXPLAIN sur la requête, en appelant
LAST_QUERY_ID()
pour rechercher l’ID de requête :SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;