カテゴリ:

システム関数

SYSTEM$EXPLAIN_PLAN_JSON

SQL ステートメントのテキストを指定すると、この関数は JSON で EXPLAIN プランを生成します。

こちらもご参照ください。

SYSTEM$EXPLAIN_JSON_TO_TEXTEXPLAIN_JSON

構文

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

引数

sql_statement_expression

必要とする EXPLAIN プランの SQL ステートメントを含む文字列、または文字列に評価される式。リテラル文字列を使用する場合は、一重引用符文字 ' で囲む必要があります。

sql_query_id_expression

必要とする EXPLAIN プランのクエリ ID を含む文字列、または文字列に評価される式。リテラル文字列を使用する場合は、一重引用符文字 ' で囲む必要があります。

戻り値

関数は、 JSON 互換形式の EXPLAIN 出力を含む VARCHAR を返します。

使用上の注意

  • 文字列リテラルが入力として渡される場合、文字列を囲む区切り文字は、一重引用符 ' または二重ドル記号 $$ のいずれかです。文字列リテラルに一重引用符が含まれる(また二重ドル記号が含まれない)場合、二重ドル記号で文字列を区切ると、文字列内に埋め込まれた一重引用符文字をエスケープする必要がなくなります。

  • このコマンドの出力を後処理するには、次の手順に従います。

    • このコマンドの出力を後処理するには、 RESULT_SCAN 関数を使用できます。この関数は、出力をクエリ可能なテーブルとして扱います。

    • 後で分析するために、 JSON 形式の出力をテーブルに挿入します。出力を JSON 形式で保存する場合は、関数 SYSTEM$EXPLAIN_JSON_TO_TEXT または EXPLAIN_JSON を使用して、 JSON をより読みやすい形式(表形式または書式付きテキスト)に変換できます。

これらの例では、以下のテーブルを使用しています。

CREATE TABLE Z1 (ID INTEGER);
CREATE TABLE Z2 (ID INTEGER);
CREATE TABLE Z3 (ID INTEGER);

この例では、n SQL ステートメントを含むリテラル文字列を入力パラメーターとして使用します。

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,"parent":0,"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parent":1,"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parent":1,"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parent":3,"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z1"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512}]]} |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

一重引用符を含むクエリを区切るには、 $$ を使用します。

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

以下のコードは、既に実行したクエリの EXPLAIN プランを確認する方法を示しています。

クエリを実行します。

SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID;

クエリで EXPLAIN を実行し、 LAST_QUERY_ID() を呼び出してクエリ ID を検索します。

SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;
最上部に戻る