EXPLAIN
EXPLAIN
EXPLAIN 명령은 Explainable statement 의 접근 경로 선택에 관한 정보를 획득합니다. SELECT 문, INSERT 문, 또는 검색을 수행하게 하는 (즉, 조건문이 있는) UPDATE 문이나 DELETE 문이 Explainable statement 입니다. 이렇게 획득한 정보는 사용자가 만들어 놓은 plan table에 그 정보가 기록됩니다.
선택적으로 EXPLAIN 문은 추가적인 두가지의 정보를 획득하여 각각의 테이블에 기록할 수 있습니다. 사용자가 만든 statement table 은 explainable statement 가 실행하는데 소요된 비용(estimated cost)에 관한 정보를 저장합니다. function table 은 explainable statement 가 참조한 사용자 정의 함수를 어떻게 풀어 나가는지에 대한 정보를 담아둡니다.
SYNTAX
EXPLAIN [ PLAN | ALL ] (SET QUERYNO=integer) FOR explainable_sql_statement
PLAN
plan table에 explainable-sql-statement 가 실행중 각각의 단계에 관한 하나의 행을 집어
넣습니다. 참조성 제약조건을 수행하는 단계는 포함되지 않습니다.
statement table 이 존재하면 explainable statement 처리의 소요비용을 제공하는 행이
statement table 에 저장됩니다.
function table 이 존재한다면 explainable statement 에 있는 각각의 사용자 정의 함수에
관한 행이 삽입됩니다.
ALL
PLAN 명령과 같은 효과를 냅니다.
SET QUERYNO = integer
explainable-sql-statement 의 번호를 정합니다. QUERYNO 열(column)은 EXPLAIN 구문
에 의해 plan table, statement table, 혹은 function table 의 각 행에 주어진 값으로 저장됩
니다. QUERYNO 가 정의되지 않으면 DB2는 스스로 번호를 할당합니다. EXPLAIN 구문에
statement 번호는 프리컴파일러와 DBRM에 할당되어 있습니다.
FOR explainable-sql-statement
EXPLAIN 구문으로 확인하고자 하는 SQL문을 적어줍니다. 어떠한 SQL문도 explainable-
sql-statement 가 될 수 있습니다. EXPLAIN 구문이 프로그램 내부에 있으면 호스트 변수를
참조하게 됩니다. 만약 EXPLAIN 이 다이나믹하게 준비되었다면, 구문은 파라미터 마커를
포함할 수 있습니다. 구문에 있는 호스트 변수는 구문이 있는 프로그램에 반드시 정의되어
있어야 합니다.
EXAMPLE
EXPLAIN 문 작성)
EXPLAIN PLAN SET QUERYNO=100
FOR SELECT * FROM DB2TL002.TBL00209
WHERE POLNO = ?
AND DATA_FLAG = ?
결과 확인)
SELECT * FROM PLAN_TABLE WHERE QUERYNO = 100;
SELECT * FROM DSN_STATEMENT_TABLE WHERE QUERYNO = 100;
PLAN TABLE
|
CREATE TABLE userid.PLAN_TABLE ( |
|
QUERYNO
QBLOCKNO
APPLNAME
PROGNAME
PLANNO
METHOD
CREATOR
TNAME
TABNO
ACCESSTYPE
MATCHCOLS
ACCESSCREATOR
ACCESSNAME
INDEXONLY
SORTN_UNIQ
SORTN_JOIN
SORTN_ORDERBY
SORTN_GROUPBY
SROTC_UNIQ
SORTC_JOIN
SORTC_ORDERBY
SORTC_GROUPBY
TSLOCKMODE
TIMESTAMP
REMARKS
PREFETCH
COLUMN_FN_EVAL
MIXOPSEQ
VERSION
COLLID
ACCESS_DEGREE
ACCESS_PGROUP_ID
JOIN_DEGREE
JOIN_PGROUP_ID
SORTC_PGROUP_ID
SORTN_PGROUP_ID
PARALLELISM_MODE
MERGE_JOIN_COLS
CORRELATION_NAME
PAGE_RANGE
JOIN_TYPE
GROUP_MEMBER
IBM_SERVICE_DATA
WHEN_OPTIMIZE
QBLOCK_TYPE
BIND_TIME
OPTHINT
HINT_USED
PRIMARY_ACCESSTYPE
PARENT_QBLOCKNO
TABLE_TYPE |
INTEGER
SMALLINT
CHAR(8)
CHAR(8)
SMALLINT
SMALLINT
CHAR(8)
CHAR(18)
SMALLINT
CHAR(2)
SMALLINT
CHAR(8)
CHAR(18)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(1)
CHAR(3)
CHAR(16)
VARCHAR(254)
CHAR(1)
CHAR(1)
SMALLINT
VARCHAR(64)
CHAR(18)
SMALLINT
SMALLINT
SMALLINT
SMALLINT
SMALLINT
SMALLINT
CHAR(1)
SMALLINT
CHAR(18)
CHAR(1)
CHAR(1)
CHAR(8)
VARCHAR(254)
CHAR(1)
CHAR(6)
TIMESTAMP
CHAR(8)
CHAR(8)
CHAR(1)
SMALLINT
CHAR(1) |
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
,
,
,
,
,
,
,
,
,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
NOT NULL WITH DEFAULT,
) |
|
IN database-name.table-space-name; |
댓글 없음:
댓글 쓰기