database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29569 게시물 읽기
No. 29569
multi column primary key 질문드립니다.
작성자
정대원(todream)
작성일
2010-03-10 10:56
조회수
8,233

안녕하세요.

다름이 아니라. 테이블을 하나 생성했는데 컬럼은 3개입니다.

각 컬럼을 조합한 하나의 레코드는 테이블내에서 unique합니다.

table (1, 2, 3) 이 있다고 하면

select .. where 1

update ... where 1,2,3

delete ... where 1.2.3

where에서는 위조건만 사용합니다.

해서 1,2,3 필드 모두를 멀티컬럼프라이머리키로 해서 생성을 하면

select시 1번 필드만으로  where하므로 index도 타고

update, delete시 전체 3필드를 전부 where하므로 index타고..

 

하면 될거 같은데.. 이럴게 3개 필드를 묶어서 primary로 하게되면 나중에 문제가 될 소지가 있을까요?

 

원래는 1앞에 0이라는 unique필드를 하나둬서(auto increment) 이걸 primary로 잡고

뒤에 1,2,3을 unique index로 잡을까 했는데..

이럴경우 괜시리 불필요한 필드하나가 더 들어가게되고.. 이걸 primary key index까지 들어가야하니..

 

처음 방법으로 해도 문제없지 않을까해서 질문드립니다.

태생이 시스템개발자라서.. DB를 잘 모르고. ㅡ; 효율성및 본인만의 생각으로 생각한건데.. 이런방식은 문제가 있는건가요?

위 테이블은 insert, delete, update가 수시로 일어납니다.

고수님들의 조언좀 부탁드리겠습니다.

이 글에 대한 댓글이 총 3건 있습니다.

사실 정답이라는게 어디 있겠습니까. 상황에 맞춰서 하는 것이지요.

다만 시간, 그리고 개발 비용과 운용/유지보수 비용을 따져가면서 한다면 정답에 가까운 결론을 얻을 수 있지 않을까 생각합니다.

 

저는 두 방식 다 나쁘지 않다고 생각하지만, 굳이 하나를 고르라고 한다면 대원님과 같이 후자를 선택하지 않을까 싶네요.

박현우(lqez)님이 2010-03-10 12:26에 작성한 댓글입니다.

안녕하세요 박성원입니다.

 

primary key와 index에 관련한 문의네요 ;;

어제 술한잔 했더니 난독증의 증세가 ㅋㅋ Orz...

 

unique와 index를 잡는것은 별도의 일입니다.

즉, 참조무결성 제약을 진행하기위해 primary key와 unique키를 지정해서 Table의 정규화를 지키는 방법이죠.

반면에 index는 테이블의 sort 및 search부분의 향상을 위한 별도의 정렬을 사전에 진행하는 것이죠 ^^

 

앞부분에서 말씀하신것처럼 multi-key의 경우 앞쪽의 컬럼에 대해서만 index의 적용이 가능합니다.

물런 3개다 index를 잡았을 경우 모두 index를 타게 되는것이지요 ㅋ

 

허나, pk와 index의 경우 index의 저장 방식이 클러스터드와 넌클러스터드로 나뉘어 지기 때문에 성능이슈가

발생할 여지가 있습니다.  (물런 이부분은 insert나 update, delete에 해당하지만요 ^^;;)

 

정리를하면

단순한 테이블의 join 의 성능향상을 위해서라면 query분석을 통해서 multi-key의 작성 여부를 판단해 주시면됩니다. ^^;;

박성원(darkancia)님이 2010-03-10 16:48에 작성한 댓글입니다.

 성원님께서 잘 설명해주셨는데, 혹시나 해서 추가 댓글 달아봅니다.

MyISAM에서는 PRIMARY KEY로 지정하더라도, 클러스터드 형태가 아닙니다.

( no등에 PK잡아주고, 중간 데이터 삭제 후에 다시 insert하면 해당 자리에 들어갑니다. )

InnoDB는 MS-SQL과 같이 PK를 클러스터드로 유지합니다. 참고하세요 ^^

 

추가 : 아래 URL을 참고하세요.

http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

박현우(lqez)님이 2010-03-10 18:15에 작성한 댓글입니다.
이 댓글은 2010-03-10 18:16에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
29572mysqldump 시 DB 용량이 늘어나면 foreign key 가 빠져서 dump 됩니다. ㅡㅡ;; [1]
김상묵
2010-03-11
7014
29571Got error -1 from storage engine [1]
박종선
2010-03-11
8358
29570replication log관련 질문입니다. [2]
최영균
2010-03-10
7014
29569multi column primary key 질문드립니다. [3]
정대원
2010-03-10
8233
29568out of memory 문제 질문이요. 급해요. ㅠㅠ 힝~ [2]
이제노
2010-03-08
7108
29567informix--> mysql [1]
ㅇㅇ
2010-03-08
6223
29566InnoDB에는 index 가 안걸리나요? [3]
박종선
2010-03-04
6625
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다