- Categorias:
SYSTEM$EXPLAIN_PLAN_JSON¶
Dado o texto de uma instrução SQL, esta função gera o plano EXPLAIN em JSON.
- Consulte também:
Sintaxe¶
SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
Argumentos¶
sql_statement_expression
Uma cadeia de caracteres ou uma expressão que avalia como uma cadeia de caracteres, contendo a instrução SQL para a qual você quer o plano EXPLAIN. Se uma cadeia de caracteres literal for usada, ela deve ser delimitada por caracteres de aspas simples
'
.sql_query_id_expression
Uma cadeia de caracteres ou uma expressão que avalia como uma cadeia de caracteres, contendo a ID da consulta para a qual você quer o plano EXPLAIN. Se uma cadeia de caracteres literal for usada, ela deve ser delimitada por caracteres de aspas simples
'
.
Retornos¶
A função retorna um VARCHAR contendo a saída EXPLAIN em formato compatível com JSON.
Notas de uso¶
Se uma cadeia de caracteres literal for passada como entrada, o delimitador ao redor da cadeia de caracteres pode ser o símbolo de aspas simples
'
ou um sinal de dólar duplo$$
. Se a cadeia de caracteres literal contiver aspas simples (e não contiver sinais de cifrão duplo), então a delimitação da cadeia de caracteres com sinais de cifrão duplo evitará a necessidade de escapar dos caracteres de aspas simples embutidos dentro da cadeia de caracteres.Para pós-processar a saída deste comando, você pode:
Usar a função RESULT_SCAN, que trata a saída como uma tabela que pode ser consultada.
Inserir a saída JSON formatada em uma tabela para análise posterior. Se você armazenar a saída no formato JSON, você pode usar a função SYSTEM$EXPLAIN_JSON_TO_TEXT ou EXPLAIN_JSON para converter o JSON em um formato legível para humanos (seja tabular ou texto formatado).
Exemplos¶
Estes exemplos utilizam as tabelas mostradas abaixo:
CREATE TABLE Z1 (ID INTEGER); CREATE TABLE Z2 (ID INTEGER); CREATE TABLE Z3 (ID INTEGER);
Este exemplo usa uma cadeia de caracteres literal contendo uma instrução SQL como parâmetro de entrada:
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}]]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Use $$
para delimitar as consultas que contenham aspas simples:
SELECT SYSTEM$EXPLAIN_PLAN_JSON( $$ SELECT symptom, IFNULL(diagnosis, '(not yet diagnosed)') FROM medical $$ );
O código abaixo mostra como olhar para o plano EXPLAIN de uma consulta que você já executou:
Executar a consulta:
SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID;Executar EXPLAIN na consulta, chamando
LAST_QUERY_ID()
para procurar a ID da consulta:SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;