- 카테고리:
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;