테이블 생성시 primarykey 생성 방법의 차이점 문의 0 5 2,085

by 내가바다 [Oracle 기초] primarykey 테이블 [2014.07.07 11:43:44]


테이블 생성시에 primary key 생성 관련해서 질문 드립니다.
아래의 두가지로 생성할 때의 차이점이 어떤게 있을까요?

방법1)
create table TEST_TABLE
(
comp_id varchar2(4) not null,
dept_id varchar2(4) not null
);
create unique index PK_TEST on TEST_TABLE (comp_id,dept_id);
alter table TEST_TABLE add (primary key (comp_id,dept_id));

방법2)
create table TEST_TABLE
(
comp_id varchar2(4),
dept_id varchar2(4),
constraint PK_TEST primary key (comp_id,dept_id)
);

by 비니 [2014.07.07 12:41:59]

음 글세요. 그냥 생성 방식의 차이일뿐.

 

뭐 1번방식으로 하게 되면 pk constraint 를 추가 하기 전에는

user constraint DD 에  unique한 제약 사항이 들어가질 않네요.

그리고 애초에 1번 방식은 유니크 인덱스를 생성할 필요가 없죠.

primary key 자체에 이미 unique한 속성이 내포되어 있는데

굳이 그 전에 유니크 인덱스를 또 생성할 필요가 없는것 같습니다.

 


by 내가바다 [2014.07.07 19:05:29]

비니님, SQL Developer에서 보면 실제 인덱스가 추가로 생기지는 않는것 같은데요...
그런데, SQLTools라는걸 이용해서 보면 유니크 인덱스가 하나 더 있는 것으로 나오더라구요
DB에 실제 인덱스가 추가로 생성이 되는 것인가요?
추가로 생성이 되면, 인덱스 용량이 더 커지게 되는건 아닌가요?


by 마농 [2014.07.07 14:32:06]

결과는 같습니다만... 이름이 다릅니다.

방법1 에서는 PK 의 명칭을 지정하지 않았으므로 sys_어쩌구 하는 이름으로 PK 가 생성됩니다.


by 타락천사 [2014.07.08 11:21:24]

1번 인덱스 생성시 테이블 스페이스 지정 !!!

 


by 비니 [2014.07.08 12:21:50]

1번과 2번이 차이를 굳이 따지는게 중요한지는 모르겠지만. 

마농님 말씀데로 pk의 경우는 제약사항 뷰에 이름이 다르게 지정이 됩니다. 

원래 pk를 생성하게 되면 기본적으로 constraint 와 인덱스 가 둘다 자동으로 생성되게 되어 있기 때문에 

굳이 유니크 인덱스를 만들 필요가 없어 집니다. 

pk (unique + not null) , uk constraint 의 경우는 자동으로 인덱스가 생성이 됩니다. 

이유는 아실지 모르겠으나  pk든 uk든 unique한 속성을 가지고 있습니다. 

데이터를 변경 (insert 혹은 update 등)를 할시에 unique한 속성에 대한 데이터값들을 빠르게 조회해서 

unique한지 아닌지 판단을 해야 되기 때문에 인덱스가 자동 생성이 되는 것일 거에요. 

그래서 굳이 unique인덱스를 생성하지 않으셔도 자동으로 생성되기 때문에 

다르게 말하면 필요 없는 작업이 되게 됩니다. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입