Oracle/Oh Oracle

"PK 설정이 장시간 걸릴때 확인 사항" NOT NULL 과 PK CONSTRAINT ( 출처 : 불친절한 SQL 프로그래밍 P590 )

darkturtle26 2023. 1. 25. 15:51


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>