다른 명령
PK 인덱스 삭제
-- 제약 조건 삭제 후 ALTER TABLE TBA.TB_SM_XXX DROP CONSTRAINT PK_SM_XXX ; -- PK 인덱스 삭제 DROP INDEX TBA.PK_SM_XXX ;
or
ALTER TABLE 테이블명 DROP PRIMARY KEY;
인덱스와 제약조건 한번에 삭제
ALTER TABLE 테이블명 DROP PRIMARY KEY DROP INDEX;
제약조건만 삭제 ,인덱스 삭제 하지 않음
ALTER TABLE 테이블명 DROP PRIMARY KEY KEEP INDEX;
PK 인덱스 생성
테이블 생성 시 제약 조건 생성
SQL> CREATE TABLE TEST1( COL1 NUMBER , COL2 NUMBER , CONSTRAINT PK_TEST1 PRIMARY KEY(COL1) ); Table created.
유니크 인덱스 생성 후 PK로 지정
유니크 인덱스 생성
SQL> CREATE UNIQUE INDEX PK_TEST1 ON TEST1(COL1); Index created.
제약조건으로 PK 인덱스 변경
SQL> ALTER TABLE TEST1 ADD CONSTRAINTS PK_TEST1 PRIMARY KEY(COL1);
ALTER TABLE .. ADD PRIMARY KEY 명령
- PK명은 SYS***으로 생성됨
ALTER TABLE TEST_TABLE ADD PRIMARY KEY (컬럼1,컬럼2,...) USING INDEX PX_xxx;
- USING INDEX 사용에 따른 인덱스 생성 여부
- 해당 컬럼으로 미리 만들어 둔 인덱스가 없는 경우 : CONSTRAINT 명칭과 동일한 이름으로 인덱스 자동 생성 됨
- 해당 컬럼으로 미리 만들어 둔 인덱스가 있는 경우 : 해당 인덱스를 이용함, 별도 인덱스 생성 안함
Non-Unique 인덱스를 Primary Key로 생성해야 하는경우
- 대용량의 데이터가 이미 존재해서 새로 인덱스를 만드는 것이 비효율적일 때 논리적으로 Unique하다면 이미 있는 Non-Unique 인덱스를 재활용하는것이 낫다고 판단 될때
- deferrable 옵션이 필요한 경우
- deferrable은 제약조건 수행을 데이터가 변경되는 시점이 아니라 commit 시점으로 미루는 옵션
- 특수한 환경에서 사용되는데 대용량 데이터를 처리하는 배치 작업에서 사용
- 데이터가 변경되는 건건이 제약조건을 적용하는 게 아니라 commit 단위마다 제약조건을 적용하면 성능 면에서 유리
- deferrable 옵션을 사용하려면 Primary Key 일지라도 Non-Unique 인덱스여야 한다