- カテゴリ:
SYSTEM$EXPLAIN_PLAN_JSON¶
SQL ステートメントのテキストを指定すると、この関数は JSON で EXPLAIN プランを生成します。
- こちらもご参照ください。
構文¶
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,"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}]]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
一重引用符を含むクエリを区切るには、 $$
を使用します。
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;