반갑습니다.
분류를 튜닝이라고 했지만, 애매모합니다.
아래와 같이 파라메타를 바꾸면
alter session set optimizer_features_enable = '10.2.0.1';
실행 계획이 10.2.0.1에서의 결과와 동일하게 나오는지 알고싶습니다.
이유는
오라클 튜닝을 학습하려고 책을 구입했는데
책의 실습환경은 오라클 10g R2라고 나와있고,
저가 실습하는 환경은
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 입니다.
아무래도 실습의 결과를 확인하려면 동일한 환경이 좋겠지만, 오라클을 다시 깔기는 그렇고..
해서 인터넷을 뒤져서 확인해보니
위의 파라메타를 바꾸면 된다고 나와있는데,
실행계획을 dbms_xplan.display를 outline으로 확인해보니
OPTIMIZER_FEATURES_ENABLE는 바뀌어 있는데
실행계획은 동일하네요.
혹 아니면 11g 에서 explain plan 실행시
10g R2에서의 결과와 동일하게 나오게 하는 좋은 방법이 있는지 알고 싶습니다.
저 생각이 너무 터무니 없는 생각이 아니길 바랍니다....
혹 아니면 11g에서 튜닝을 학습/실습하기 좋은 서적있으면 추천부탁드립니다.
쩝..개발만 하다 오라클을 파볼려구하니 처음부터 어렵네요.
아래는 사용한 쿼리와 플랜입니다
explain plan for select c1, c2, c3 from subquery_t2 t2 where c1 >= :b1 and c1 <= :b2 and exists ( select /*+ no_unest */ 'x' from subquery_t1 t1 where t1.c4 = t2.c1 ) ; select * from table(dbms_xplan.display(null, null, 'outline')) ; PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------------------------------------- Plan hash value: 1366364322 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 625 | 10625 | 197 (1)| 00:00:03 | |* 1 | FILTER | | | | | | |* 2 | HASH JOIN SEMI | | 625 | 10625 | 197 (1)| 00:00:03 | | 3 | TABLE ACCESS BY INDEX ROWID| SUBQUERY_T2 | 1250 | 15000 | 13 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | PK_SUQUERY_2 | 2250 | | 7 (0)| 00:00:01 | |* 5 | INDEX RANGE SCAN | SUBQUERY_T1_IDX_01 | 40000 | 195K| 183 (0)| 00:00:03 | ---------------------------------------------------------------------------------------------------- Outline Data ------------- /*+ BEGIN_OUTLINE_DATA USE_HASH(@"SEL$5DA710D3" ") LEADING(@"SEL$5DA710D3" " ") INDEX(@"SEL$5DA710D3" " ("SUBQUERY_T1"."C4" "SUBQUERY_T1"."C5")) INDEX_RS_ASC(@"SEL$5DA710D3" " ("SUBQUERY_T2"."C1")) OUTLINE(@"SEL$2") OUTLINE(@"SEL$1") UNNEST(@"SEL$2") OUTLINE_LEAF(@"SEL$5DA710D3") ALL_ROWS DB_VERSION('11.2.0.1') OPTIMIZER_FEATURES_ENABLE('11.2.0.1') IGNORE_OPTIM_EMBEDDED_HINTS END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(TO_NUMBER(:B1)<=TO_NUMBER(:B2)) 2 - access("T1"."C4"="T2"."C1") 4 - access("C1">=TO_NUMBER(:B1) AND "C1"<=TO_NUMBER(:B2)) 5 - access("T1"."C4">=TO_NUMBER(:B1) AND "T1"."C4"<=TO_NUMBER(:B2)) 40 rows selected. PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------------------------------------- Plan hash value: 1366364322 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 625 | 10625 | 197 (1)| 00:00:03 | |* 1 | FILTER | | | | | | |* 2 | HASH JOIN SEMI | | 625 | 10625 | 197 (1)| 00:00:03 | | 3 | TABLE ACCESS BY INDEX ROWID| SUBQUERY_T2 | 1250 | 15000 | 13 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | PK_SUQUERY_2 | 2250 | | 7 (0)| 00:00:01 | |* 5 | INDEX RANGE SCAN | SUBQUERY_T1_IDX_01 | 40000 | 195K| 183 (0)| 00:00:03 | ---------------------------------------------------------------------------------------------------- Outline Data ------------- /*+ BEGIN_OUTLINE_DATA USE_HASH(@"SEL$5DA710D3" ") LEADING(@"SEL$5DA710D3" " ") INDEX(@"SEL$5DA710D3" " ("SUBQUERY_T1"."C4" "SUBQUERY_T1"."C5")) INDEX_RS_ASC(@"SEL$5DA710D3" " ("SUBQUERY_T2"."C1")) OUTLINE(@"SEL$2") OUTLINE(@"SEL$1") UNNEST(@"SEL$2") OUTLINE_LEAF(@"SEL$5DA710D3") ALL_ROWS DB_VERSION('11.2.0.1') OPTIMIZER_FEATURES_ENABLE('10.2.0.1') IGNORE_OPTIM_EMBEDDED_HINTS END_OUTLINE_DATA */