QUERY 작업을 할 때 가끔은 인덱스가 없다면 실행계획이 어떻게 될까,고민 하면서 인덱스를 DROP 하고 실행 계획을 본 후 다시 INDEX를 생성하여 실행 계획을 보는 경우 들이 있을 것이다. 적은 량의 데이터라면 문제가 아닐텐데 많은 양의 데이터가 있는 테이블 이라면 조금은 고민 될 것이다.
이때 사용할 수 있는 것이 Oracle 11g에서 소개된 INVISIBLE INDEX 인데 인덱스를 invisible로 만들어서 옵티마이저에서 명시적으로 사용하지 말라고 지시를 할 수 있다.
[예]
conn / as sysdba
SQL>@e:\app\a\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql
SQL>@e:\app\a\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql
SQL>grant plustrace to scott
conn scott/tiger
SQL>set autotrace on
create index idx_emp_sal on emp(sal);
set autotrace on
select empno, ename from emp
where sal > 500;
Execution Plan
----------------------------------------------------------
Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
| 0 | SELECT STATEMENT | | 14 | 196 | 2 (0)|
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 14 | 196 | 2 (0)|
|* 2 | INDEX RANGE SCAN | IDX_EMP_SAL | 14 | | 1 (0)|
IDX_EMP_SAL 인덱스를 이용했음을 알 수 있다.
이제 인덱스를 invisible 시켜보자.
SQL>ALTER INDEX IDX_EMP_SAL INVISIBLE;
SQL>select empno, ename from emp
where sal > 500;
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 196 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 14 | 196 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
실행 계획을 보면 IDX_EMP_SAL 인덱스를 사용하지 않았음을 알 수 있다.
SQL> SELECT INDEX_NAME, INDEX_TYPE, VISIBILITY
FROM ALL_INDEXES
WHERE INDEX_NAME LIKE '%EMP%';
INDEX_NAME INDEX_TYPE VISIBILITY
------------------------------ --------------------------- --------------------
IDX_EMP_SAL NORMAL INVISIBLE
PK_EMP NORMAL VISIBLE
ALL_INDEXES 뷰를 보면 INVISIBLE 상태로 되어 있음을 알 수 있다.
다시 인덱스를 보이도록 하려면...
SQL>alter index IDX_EMP_SAL visible;
SQL> SELECT INDEX_NAME, INDEX_TYPE, VISIBILITY
FROM ALL_INDEXES
WHERE INDEX_NAME LIKE '%EMP%';
INDEX_NAME INDEX_TYPE VISIBILITY
------------------------------ --------------------------- --------------------
IDX_EMP_SAL NORMAL VISIBLE
PK_EMP NORMAL VISIBLE
2 rows selected.
이때 사용할 수 있는 것이 Oracle 11g에서 소개된 INVISIBLE INDEX 인데 인덱스를 invisible로 만들어서 옵티마이저에서 명시적으로 사용하지 말라고 지시를 할 수 있다.
[예]
conn / as sysdba
SQL>@e:\app\a\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql
SQL>@e:\app\a\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql
SQL>grant plustrace to scott
conn scott/tiger
SQL>set autotrace on
create index idx_emp_sal on emp(sal);
set autotrace on
select empno, ename from emp
where sal > 500;
Execution Plan
----------------------------------------------------------
Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
| 0 | SELECT STATEMENT | | 14 | 196 | 2 (0)|
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 14 | 196 | 2 (0)|
|* 2 | INDEX RANGE SCAN | IDX_EMP_SAL | 14 | | 1 (0)|
IDX_EMP_SAL 인덱스를 이용했음을 알 수 있다.
이제 인덱스를 invisible 시켜보자.
SQL>ALTER INDEX IDX_EMP_SAL INVISIBLE;
SQL>select empno, ename from emp
where sal > 500;
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 196 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 14 | 196 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
실행 계획을 보면 IDX_EMP_SAL 인덱스를 사용하지 않았음을 알 수 있다.
SQL> SELECT INDEX_NAME, INDEX_TYPE, VISIBILITY
FROM ALL_INDEXES
WHERE INDEX_NAME LIKE '%EMP%';
INDEX_NAME INDEX_TYPE VISIBILITY
------------------------------ --------------------------- --------------------
IDX_EMP_SAL NORMAL INVISIBLE
PK_EMP NORMAL VISIBLE
ALL_INDEXES 뷰를 보면 INVISIBLE 상태로 되어 있음을 알 수 있다.
다시 인덱스를 보이도록 하려면...
SQL>alter index IDX_EMP_SAL visible;
SQL> SELECT INDEX_NAME, INDEX_TYPE, VISIBILITY
FROM ALL_INDEXES
WHERE INDEX_NAME LIKE '%EMP%';
INDEX_NAME INDEX_TYPE VISIBILITY
------------------------------ --------------------------- --------------------
IDX_EMP_SAL NORMAL VISIBLE
PK_EMP NORMAL VISIBLE
2 rows selected.
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)안드로이드개발자과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(6/21)Spring3.X, MyBatis, Hibernate실무과정
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/21)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/28)SQL초보에서 Schema Object까지
(6/28)안드로이드개발자과정
(6/28)개발자를위한PLSQL,SQL튜닝,힌트
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/13)C#,ASP.NET마스터
주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)안드로이드개발자과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(6/21)Spring3.X, MyBatis, Hibernate실무과정
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/21)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/28)SQL초보에서 Schema Object까지
(6/28)안드로이드개발자과정
(6/28)개발자를위한PLSQL,SQL튜닝,힌트
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/13)C#,ASP.NET마스터
주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지
댓글 없음:
댓글 쓰기