행위

"오라클 PK 생성"의 두 판 사이의 차이

DB CAFE

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

2023년 8월 17일 (목) 22:09 기준 최신판

thumb_up 추천메뉴 바로가기


1 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;

1.1 인덱스와 제약조건 한번에 삭제[편집]

ALTER TABLE 테이블명 
 DROP PRIMARY KEY DROP INDEX;


1.2 제약조건만 삭제 ,인덱스 삭제 하지 않음[편집]

ALTER TABLE 테이블명 
 DROP PRIMARY KEY KEEP INDEX;






2 PK 인덱스 생성[편집]

2.1 테이블 생성 시 제약 조건 생성[편집]

SQL> CREATE TABLE TEST1( COL1 NUMBER
                       , COL2 NUMBER
                       , CONSTRAINT PK_TEST1 PRIMARY KEY(COL1)
                       );
Table created.

2.2 유니크 인덱스 생성 후 PK로 지정[편집]

2.2.1 유니크 인덱스 생성[편집]

SQL> CREATE UNIQUE INDEX PK_TEST1 ON TEST1(COL1);
Index created.

2.2.2 제약조건으로 PK 인덱스 변경[편집]

SQL> ALTER TABLE TEST1 ADD CONSTRAINTS PK_TEST1 PRIMARY KEY(COL1);

2.3 ALTER TABLE .. ADD PRIMARY KEY 명령[편집]

  • PK명은 SYS***으로 생성됨
ALTER TABLE TEST_TABLE 
        ADD PRIMARY KEY (USER_ID,,);
  1. USING INDEX 사용에 따른 인덱스 생성 여부
  2. 해당 컬럼으로 미리 만들어 둔 인덱스가 없는 경우 : CONSTRAINT 명칭과 동일한 이름으로 인덱스 자동 생성 됨
  3. 해당 컬럼으로 미리 만들어 둔 인덱스가 있는 경우 : 해당 인덱스를 이용함, 별도 인덱스 생성 안함


2.4 Non-Unique 인덱스를 Primary Key로 생성해야 하는경우[편집]

  1. 대용량의 데이터가 이미 존재해서 새로 인덱스를 만드는 것이 비효율적일 때 논리적으로 Unique하다면 이미 있는 Non-Unique 인덱스를 재활용하는것이 낫다고 판단 될때
  2. deferrable 옵션이 필요한 경우
    1. deferrable은 제약조건 수행을 데이터가 변경되는 시점이 아니라 commit 시점으로 미루는 옵션
    2. 특수한 환경에서 사용되는데 대용량 데이터를 처리하는 배치 작업에서 사용
    3. 데이터가 변경되는 건건이 제약조건을 적용하는 게 아니라 commit 단위마다 제약조건을 적용하면 성능 면에서 유리
    4. deferrable 옵션을 사용하려면 Primary Key 일지라도 Non-Unique 인덱스여야 한다