TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-07-15 |
제목 | INDEX가 걸려 있는 TABLE에서 TABLE에만 INSERT하는 방법(INDEX DISABLE) | ||
---|---|---|---|
INDEX가 걸려 있는 TABLE에서 TABLE에만 INSERT하는 방법(INDEX DISABLE)
==================================================================== Purpose ------- Oracle8에서는 Index가 걸려있는 table에 insert는 disable시키고 table에만 먼저 Insert할 수가 있다. 그 방법을 알아보자. Explanation ----------- 대량의 DATA를 한꺼번에 INSERT하는 경우에는 TABLE에 걸려있는 INDEX 때문에 속도가 느려지게 된다. INDEX를 DROP하고 INSERT한 후에 다시 생성할 수도 있지만 그 경우에도 데이터가 많으므로 INDEX를 다시 생성하는 데에 시간이 오래 걸리게 된다. Oracle8에서는 이런 경우 index를 고려하지 않고 insert를 한 후에 index를 rebuild하는 방법을 사용할 수 있다. 대량의 data를 입력할 때에 index에는 입력하지 않으므로 보다 속도가 빠르며 index를 rebuild하는 것은 drop한 후에 다시 생성하는 것 보다 속도가 빠르므로 더 효율적인 방법이 될 수 있다. 이 방법은 local index 또는 global index 에 대해 관계없이 사용할 수 있다. - ON-LINE에서 사용하는 방법 1. 먼저 index의 status를 살펴보면 SQL> select index_name, table_name, status from user_indexes; INDEX_NAME TABLE_NAME STATUS ---------------- ------------------ -------- I_DEPT DEPT VALID 2. insert를 table의 index인 I_dept 를 unusable 상태로 바꾼다. SQL> alter index i_dept unusable; Index altered. SQL> select index_name, table_name, status from user_indexes; INDEX_NAME TABLE_NAME STATUS --------------- ----------------- -------- I_DEPT DEPT UNUSABLE 3. index 가 unusable 인 상태에서는 insert할 수 없으며 다음과 같은 명령어를 실행하여야 insert가 가능하다 SQL> alter session set skip_unusable_indexes = true; Session altered. SQL> insert into dept values(50,'aaa','aaa'); 1 row created. 4. insert를 하는 작업이 모두 끝나면 다음과 같이 index를 rebuild해 준다. SQL> alter index i_dept rebuild; Index altered. SQL> select index_name, table_name, status from user_indexes; INDEX_NAME TABLE_NAME STATUS ---------------- ----------------- -------- I_DEPT DEPT VALID - SQL*LOADER에서 사용하는 방법 SQL*LOADER에서는 다음의 COMMAND OPTION으로 이 방법을 사용할 수 있다. SKIP_UNUSABLE_INDEXES = TRUE ( DEFAULT 는 FALSE ) loader에서 작업하기 전에 먼저 해당 index를 unusable 상태로 바꾼 후에 다음과 같이 sql*loader를 실행한다. # sqlldr userid=scott/tiger control=dept.ctl skip_unusable_indexes=true |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |