[Hint]ACCESS 경로를 변경하는 힌트(NO_EXPAND)
NO_EXPAND 힌트는 COST BASED Optimizer 모드에서 OR 조건이나 IN List등을 사용할 때 OR확장(Concatenation등을 사용하여..)을 막는 것인데 실행 계획에 Concatenation이 나타날 수 있는데 이를 사용하지 않도록 않도록 처리해 줍니다.
즉 OR를 UNION-ALL로 풀지 말고
아래의 예를 보죠~
[형식]
/*+ NO_EXPAND */
실습을 위해 먼저 옵티마이저 모드를 RULE로 바꾼 후 …
왜 바꾸냐 하면? EMP 테이블의 경우 데이터 양이 적으므로 OR를 사용하더라도 FULL SCAN하는 실행계획을 만들어 내므로 고의로 CONCATENATION을 만들어 내기 위해 RULE BASED Optimizer Mode로 변경하는 것입니다. 물론 옵티마이저 모드를 CHOOSE로 한 후 테이블의 통계 정보를 삭제하는 경우에도 동일 합니다.
alter session set optimizer_mode=rule;
SELECT ename, sal
FROM EMP
WHERE JOB = 'CLERK'
OR JOB = 'SALESMAN'
-----------------------------------------------------------------
Operation Object Name Rows Bytes Cost
-----------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=RULE
CONCATENATION
TABLE ACCESS BY INDEX ROWID SCOTT.EMP
INDEX RANGE SCAN SCOTT.IDX_EMP_JOB
TABLE ACCESS BY INDEX ROWID SCOTT.EMP
INDEX RANGE SCAN SCOTT.IDX_EMP_JOB
SELECT /*+ NO_EXPAND */
ENAME, SAL
FROM EMP
WHERE JOB = 'CLERK'
OR JOB = 'SALESMAN'
Operation Object Name Rows Bytes Cost
SELECT STATEMENT Optimizer Mode=RULE 6 2
INLIST ITERATOR
TABLE ACCESS BY INDEX ROWID SCOTT.EMP 6 96 2
INDEX RANGE SCAN SCOTT.IDX_EMP_JOB 6 1
NO_EXPAND 힌트는 COST BASED Optimizer 모드에서 OR 조건이나 IN List등을 사용할 때 OR확장(Concatenation등을 사용하여..)을 막는 것인데 실행 계획에 Concatenation이 나타날 수 있는데 이를 사용하지 않도록 않도록 처리해 줍니다.
즉 OR를 UNION-ALL로 풀지 말고
아래의 예를 보죠~
[형식]
/*+ NO_EXPAND */
실습을 위해 먼저 옵티마이저 모드를 RULE로 바꾼 후 …
왜 바꾸냐 하면? EMP 테이블의 경우 데이터 양이 적으므로 OR를 사용하더라도 FULL SCAN하는 실행계획을 만들어 내므로 고의로 CONCATENATION을 만들어 내기 위해 RULE BASED Optimizer Mode로 변경하는 것입니다. 물론 옵티마이저 모드를 CHOOSE로 한 후 테이블의 통계 정보를 삭제하는 경우에도 동일 합니다.
alter session set optimizer_mode=rule;
SELECT ename, sal
FROM EMP
WHERE JOB = 'CLERK'
OR JOB = 'SALESMAN'
-----------------------------------------------------------------
Operation Object Name Rows Bytes Cost
-----------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=RULE
CONCATENATION
TABLE ACCESS BY INDEX ROWID SCOTT.EMP
INDEX RANGE SCAN SCOTT.IDX_EMP_JOB
TABLE ACCESS BY INDEX ROWID SCOTT.EMP
INDEX RANGE SCAN SCOTT.IDX_EMP_JOB
SELECT /*+ NO_EXPAND */
ENAME, SAL
FROM EMP
WHERE JOB = 'CLERK'
OR JOB = 'SALESMAN'
Operation Object Name Rows Bytes Cost
SELECT STATEMENT Optimizer Mode=RULE 6 2
INLIST ITERATOR
TABLE ACCESS BY INDEX ROWID SCOTT.EMP 6 96 2
INDEX RANGE SCAN SCOTT.IDX_EMP_JOB 6 1
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… | 12-27 | 2033 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1482 | ||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 1244 | |
52 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 | 01-31 | 1399 | |
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 1260 | |
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 1086 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1402 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1231 | |
47 | [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… | 01-03 | 1731 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… | 12-27 | 2033 | |
45 | [기업100%환급,평일주간]자바기초에서 JDBC, Servlet/JSP까지 | 12-19 | 1496 | |
44 | [평일야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,Jav… | 12-14 | 1477 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1482 | |
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 1185 | |
41 | [평일야간, 주말]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1402 | |
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1547 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1055 |
댓글 없음:
댓글 쓰기