mySQL 마스터키 설정에 정말 궁금한거.... > 자유게시판

자유게시판

mySQL 마스터키 설정에 정말 궁금한거.... 정보

mySQL 마스터키 설정에 정말 궁금한거....

본문

mySQL 은 처음 사용하다 보니 성능과 안전성에 대해 궁금한게 많습니다.

경험이 많으신 고수님들, 좀 알려 주시면 감사하겠습니다.


1. mySQL 에서 보통 마스터키로 잡는 idx 같은 필드를 Autoincrement, Unique로 잡는데 믿어도 되나요?

이런 질문을 드리는 이유는 전에 작업하던 ISAM 시스템의 DB에서는 UNIQUE 로 해 두었는데도 동시접속이 워낙 많으면 가끔 같은 번호가 들어가서 DB가 깨지는 현상을 경험했습니다. (물론 SQL 같은 클라이언드-서버용 DB는 아니었지만...)

몇번 끔직한 경험을 하고는 아예 AUTO, UNIQUE 지정안하고 idx의 내용을 [년월일시간-난수3자리]로 사용해서 문제를 해결하였습니다.

예를들어 [20091208-121213-004] 같이 말이죠..

이정도면 1초에 999명이 동시에 입력해도 같은 번호를 가질 일이 거의 없으니까 똑 같은 효과를 가지고, 만에 하나 같은 번호가 생겨도 UNIQUE로 잡지 않았으므로 DB오류도 나지 않습니다.

(대형 사이트에서 주문번호를 보면 위와 같은 방식을 쓰는것 같다는 생각도 듭니다..)


물론 DB설정에서 autoincrement, unique로 잡으면 코딩은 더 편하겠지요.

그런데 이것을 처리하려면 서버엔진 내부적으로는 마지막번호를 계산해야 하고, 유니크한 값인지 계산해야 하지 않을까요?

그것보다 위에서 처럼 unique로 잡지 않고 실제로는 unique한 값을 넣으면 더 빠르고 안전하지 않을까요?

요게 정말 궁금합니다....^^

혹시 사용하시면서 unique한 필드에 같은 값이 들어가 db가 깨져본 경험 있으신 분 계시나요?  아니면 mySQL에서는 이런 걱정할 필요 없는 건가요?


2. 책에서 보면 mySQL에서는 모든 테이블에 각각 unique 값을 가진 마스터키가 하나는 있어야 한다고 하는데 정말 그런가요?

unique 값이 필요 없는 테이블도 있는데.....?  그래도 만들어야 하나요?

예를들어 고객테이블(customer)과 고객거래내역 테이블(trade) 두개가 있을때 trade 테이블에는 고객 id만 있으면 되지 궂이 별도의 unique한 필드는 필요가 없는데 그래도 만들어야 하나요?  그냥 고객id로 인덱스만 잡아서 쓰면 될것 같은데....


저의 궁금증 좀 꼭 해결해 주십시요....^ ^


추천
0
  • 복사

댓글 10개

1. naver나 google도 mysql을 쓰고 있습니다.
  mysql은 한때 sap의 회사였구요.
  아무 문제 없습니다.

2. 모든 테이블이 unique key를 가질 필요없어요.
  g4_config 같은 테이블은 아무것도 index가 없어요.
1. 프로그렘으로짜면 오히려 더 겹쳐질 상황이 생길것같은대요^^
2. 유니키가 없어도 테이블은 생성하는데는 문제가없습니다.
트랜젝션이 참 좋은 기능이긴 하지만 정말 꼭 필요할때 써야지 남발하면 서버에 꽤 많은 부하를 주는 걸로 알고 있습니다만...
위에 글을 읽어보니 트렌젝션을 남발 할 구조는 아닌것 같은데요~ 동시접속에 관해서만, 쓰레드처럼 작용하게 하면 안되는건가요~?
아~ 위의 예는 그냥 설명을 쉽게 하려고 한거구요...

아무튼 트랜젝션은 신중하게 써야 하는건 확실합니다.. 특히 동접자수 많을땐...
© SIRSOFT
현재 페이지 제일 처음으로