Oracle/Administration2012. 5. 18. 13:17

PK 제약조건은 인덱스를 사용한다.[각주:1]


테스트를 위해 아래와 같이 테이블을 생성하자.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER);


PK 생성시 제약조건을 검증할 수 있는 인덱스가 없다면 UNIQUE 인덱스가 자동으로 생성된다.

-- 2
ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (c1);

SELECT index_name FROM user_constraints WHERE constraint_name = 'T1_PK';

INDEX_NAME
----------
T1_PK

1개의 행이 선택되었습니다.


제약조건을 검증할 수 있는 인덱스가 있다면 가장 먼저 생성된 인덱스를 사용한다. 아래 예제에서는 NONUNIQUE 인덱스인 t1_x1 인덱스를 사용했다.

-- 3
CREATE INDEX t1_x1 ON t1 (c1, c2);
CREATE UNIQUE INDEX t1_pk ON t1 (c1);

ALTER TABLE t1 DROP CONSTRAINT t1_pk;
ALTER TABLE t1 ADD  CONSTRAINT t1_pk PRIMARY KEY (c1);

SELECT index_name FROM user_constraints WHERE constraint_name = 'T1_PK';

INDEX_NAME
----------
T1_X1

1개의 행이 선택되었습니다.


아래처럼 USING INDEX 절을 사용하여 사용할 인덱스를 명시적으로 지정하는 편이 바람직하다.

-- 4
ALTER TABLE t1 DROP CONSTRAINT t1_pk;
ALTER TABLE t1 ADD  CONSTRAINT t1_pk PRIMARY KEY (c1) USING INDEX t1_pk;

SELECT index_name FROM user_constraints WHERE constraint_name = 'T1_PK';

INDEX_NAME
----------
T1_PK

1개의 행이 선택되었습니다.


  1. UNIQUE 제약조건도 마찬가지다. [본문으로]

'Oracle > Administration' 카테고리의 다른 글

EDITIONING 뷰 테스트  (0) 2012.05.31
CHECK 제약조건 적용 사례  (0) 2012.05.22
RANGE 파티션 통계정보 관리 패키지  (0) 2012.05.10
INVISIBLE 인덱스  (0) 2012.05.02
DDL TRIGGER 감사 기능  (0) 2012.05.01
Posted by 정희락_