카테고리:

시스템 함수

SYSTEM$EXPLAIN_PLAN_JSON

SQL 문의 텍스트가 주어지면 이 함수는 JSON으로 EXPLAIN 계획을 생성합니다.

참고 항목:

SYSTEM$EXPLAIN_JSON_TO_TEXT , EXPLAIN_JSON

구문

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

인자

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

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

$$ 를 사용하여, 작은따옴표를 포함하는 쿼리를 구분합니다.

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

아래 코드는 이미 실행한 쿼리에 대한 EXPLAIN 계획을 보는 방법을 보여줍니다.

쿼리를 실행합니다.

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

쿼리에서 EXPLAIN을 실행하고 LAST_QUERY_ID() 를 호출하여 쿼리 ID를 찾습니다.

SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;
Copy