행위

"파티션 테이블 로컬인덱스 생성"의 두 판 사이의 차이

DB CAFE

(로컬 인덱스 빠르게 생성하는 팁)
(로컬 인덱스 빠르게 생성하는 팁)
31번째 줄: 31번째 줄:
 
----
 
----
 
   
 
   
5.INDEX 생성(UNUSABLE 옵션 적용)
 
<source lang=sql>
 
CREATE INDEX IX_TBABC10_L1 ON TBABC10(YM, PROC_CD, PROC_STAT)
 
      LOCAL (
 
                      PARTITION PT_TBABC10_200711 ... ,
 
                      PARTITION PT_TBABC10_200712 ... ,
 
                      PARTITION PT_TBABC10_200801 ... ,
 
                      PARTITION PT_TBABC10_200802 ... ,
 
                      PARTITION PT_TBABC10_200803 ... ,
 
                      PARTITION PT_TBABC10_999999 ... 
 
                    )
 
    UNUSABLE ;
 
</source>
 
  
6.각 파티션별로 REBUILD
 
  가장 많이 ACCESS(최근 사용)되는 파티션부터 생성
 
https://docs.oracle.com/cd/E11882_01/server.112/e41084/img/alter_index.gif
 
<source lang=sql>
 
ALTER INDEX IX_TBABC10_L1 REBUILD PARTITION PT_TBABC10_999999
 
TABLESPACE TS_TBABC10_999999 PARALLEL(DEGREE 8) NOLOGGING;
 
 
ALTER INDEX IX_TBABC10_L1 REBUILD PARTITION PT_TBABC10_200803
 
TABLESPACE TS_TBABC10_200803 PARALLEL(DEGREE 8) NOLOGGING;
 
                :
 
ALTER INDEX IX_TBABC10_L1 NOPARALLEL LOGGING;
 
</source>
 
 
 
'''특히, PK(PRIMARY KEY)를 생성하는 경우 ALTER TABLE ... ADD CONSTRAINTS ... 명령을
 
'''특히, PK(PRIMARY KEY)를 생성하는 경우 ALTER TABLE ... ADD CONSTRAINTS ... 명령을
  

2023년 6월 20일 (화) 23:52 판

thumb_up 추천메뉴 바로가기


1 로컬 인덱스 생성[편집]

create index IDX_SALES_01 
    on SALES (sales_no) 
  LOCAL;

2 로컬 인덱스 빠르게 생성하는 팁[편집]

 arrow_downward 1.파티션된 로컬 인덱스를 UNUSABLE 옵션으로 생성

create index ix_sales_01
    on sales(col1,col2,....)
 local unusable
tablespace ts_idx_01;

 arrow_downward 2.로컬 인덱스들을 REBUILD

select 'alter index emp.'|| index_name ||' rebuild partition ' || partition_name || ' parallel 16;'
  from dba_ind_partitions
 where index_name = 'ix_sales_01';


특히, PK(PRIMARY KEY)를 생성하는 경우 ALTER TABLE ... ADD CONSTRAINTS ... 명령을

이용하면 위와같이 작업할 수 없다.

다음과 같은 순서로 작업하면 된다.

1) CREATE UNIQUE INDEX <PK_INDEX명> ON <TABLE명> (..컬럼..) 
      TABLESPACE <테이블스페이스명> LOCAL ( PARTITION <파티션명> TABLESPACE <테이블스페이스명> ,
                                            PARTITION <파티션명> TABLESPACE <테이블스페이스명> ,
                                            ....................
                                          ) 
       UNUSABLE; -- INDEX 미사용으로 생성해야 속도 빠름
2) ALTER INDEX <PK_INDEX명> REBUILD PARTITION <PARTITION명> [ TABLESPACE <테이블스페이스명> ] ;  -- 인덱스 REBUILD 
3) ALTER INDEX <PK_INDEX명> NOPARALLEL LOGGING;  -- 인덱스 NOPARALLEL LOGGING 모드로 변경 
4) ALTER TABLE <TABLE명> ADD CONSTRAINTS <PK_INDEX명> PRIMARY KEY (...PK컬럼..) ; --
  • 예시)
-- UNIQUE INDEX 생성   
CREATE UNIQUE INDEX MIG_ADM.PK_MA_XXXX_CLASS ON MIG_ADM.TB_MA_XXXX_CLASS
(CLSS_CD)
NOLOGGING
TABLESPACE TS_MIG
PARALLEL 8
UNUSABLE
;
--
ALTER INDEX MIG_ADM.PK_MA_XXXX_CLASS REBUILD ....;
-- PK 생성 

ALTER TABLE MIG_ADM.TB_MA_XXXX_CLASS ADD (
  CONSTRAINT PK_MA_XXXX_CLASS
  PRIMARY KEY
  (CLASS_CD)
  USING INDEX MIG_ADM.PK_MA_XXXX_CLASS
  ENABLE VALIDATE)
;