TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-27 |
제목 | EXPLAIN PLAN 을 자동으로 수행하는 방법 | ||
---|---|---|---|
EXPLAIN PLAN 을 자동으로 수행하는 방법
====================================== Purpose ------- 이 자료에서는 sql*plus 에서 자동으로 explain plan 을 만드는 방법을 설명한다. 이 방법으로 explain 을 실행하는 구문을 기억할 필요없이 현재 수행하는 sql 문장을 쉽게 체크해 볼 수 있다. Explanation ----------- 아래의 script를 실행하기 전에 사용하고자 하는 user로 sqlplus login한 후 $ORACLE_HOME/rdbms/admin/utlxplan.sql을 수행하여 plan_table을 생성한다. 다음이 script 의 내용이다. 단, 이 때 --로 시작하는 comment로 인해 error가 발생하는 수도 있으므로, 오류가 발생하면 --로 시작하는 comment를 모두 제거하고 수행하면 된다. save toto repl -- Save current script truncate table plan_table; -- Clean Plan Table get toto nolist -- Restore script 1 -- setup explain statement -- 영문자 l이 아니고 숫자 1이다. ch //explain plan set statement_id='MyTest' for / / -- Go! select lpad(' ',2*(level-1))|| operation||' '|| options||' '||object_name|| ' '||object_type||' '||object_instance||' '|| decode(id,0,'Cost = '||position) "Query Plan" from plan_table start with id = 0 -- start with statement_id = 'MyTest' connect by prior id = parent_id; get toto nolist -- Restore script Example ------- 위의 script 를 'plan.sql' 이라는 화일로 저장한 후 sql*plus에서 실행한다. SQL> select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> @plan Wrote file toto Table truncated. 1* select * from dept 1* explain plan set statement_id='MyTest' for select * from dept Explained. Query Plan ---------------------------------------------------------------------- SELECT STATEMENT Cost = 1 TABLE ACCESS FULL DEPT 1 Script 는 plan.sql 로 저장 되어 있으므로 user 는 buffer 를 query 해서 어느 정도의 수정을 가할수 있다. SQL> l 1* select * from dept SQL> i 2 where deptno =20; DEPTNO DNAME LOC ---------- -------------- ------------- 20 RESEARCH DALLAS SQL> @plan Wrote file toto Table truncated. 1* select * from dept 1* explain plan set statement_id='MyTest' for select * from dept Explained. Query Plan ---------------------------------------------------------------------- SELECT STATEMENT Cost = 1 TABLE ACCESS BY ROWID DEPT 1 INDEX UNIQUE SCAN DEPT_PRIMARY_KEY UNIQUE ---------------------------------------------------------------------- |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |