728x90
NOT NULL 과 PK CONSTRAINT ( 출처 : 불친절한 SQL 프로그래밍 P590 )
: 일반적으로 PK 대상 칼럼에 대해서
가. 1) NOT NULL 설정 -> 2) PK UNIQUE INDEX 생성 -> 3) PK CONSTRAINT 순으로 작업 함
나. 3)번 작업은 1~2초 안에 완료됨
( NOT NULL 설정이고, INDEX 가 이미 생성 되어 있어, 데이타 중복에 대한 검증 불필요 )
다. 3)번 작업이 오래 걸리는 경우는 PK 칼럼에 대해서 NOT NULL 설정이 없는 경우이고
, Data Migration 시, 종종 발견됨
라. 해소 방안은 PK 칼럼에 대한 NOT NULL 설정 !!!
SQL> DROP TABLE T1 PURGE ;
Table dropped.
SQL> CREATE TABLE T1 ( C1 NUMBER NOT NULL, C2 NUMBER, C3 VARCHAR2(4000));
Table created.
SQL> INSERT INTO T1
2 SELECT ROWNUM AS C1, ROWNUM AS C2 , LPAD('X',4000,'X') AS C3
3 FROM XMLTABLE('1 to 1000000');
1000000 rows created.
SQL> COMMIT;
Commit complete.
SQL> CREATE UNIQUE INDEX T1_U1 ON T1 ( C1 ) ;
Index created.
SQL> CREATE UNIQUE INDEX T1_U2 ON T1 ( C2 ) ;
Index created.
SQL> set timing on
-- NOT NULL + INDEX 생성 된 상태라, 바로 처리됨
SQL> ALTER TABLE T1 ADD CONSTRAINT T1_PK PRIMARY KEY (C1);
Table altered.
Elapsed: 00:00:00.03
SQL> ALTER TABLE T1 DROP CONSTRAINT T1_PK ;
Table altered.
Elapsed: 00:00:00.02
-- NOT NULL 설정이 없고 + INDEX 생성 된 상태라, 바로 시간 걸림
-- 시간 걸림 --> TABLE FULL SCAN 으로 NOT NULL 확인 시간 ..
SQL> ALTER TABLE T1 ADD CONSTRAINT T1_PK PRIMARY KEY (C2) ;
Table altered.
Elapsed: 00:00:51.94
SQL>