Categorias:

Funções do sistema

SYSTEM$EXPLAIN_PLAN_JSON

Dado o texto de uma instrução SQL, esta função gera o plano EXPLAIN em JSON.

Consulte também:

SYSTEM$EXPLAIN_JSON_TO_TEXT , EXPLAIN_JSON

Sintaxe

SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
Copy

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);
Copy

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}]]} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Copy

Use $$ para delimitar as consultas que contenham aspas simples:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(
    $$ SELECT symptom, IFNULL(diagnosis, '(not yet diagnosed)') FROM medical $$
    );
Copy

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;
Copy

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;
Copy