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 30185 게시물 읽기
No. 30185
레코드 id생성시 autoincreased나 시퀀스말고 다르게쓰는 경우가있나요?
작성자
조송민(944899)
작성일
2012-01-11 03:06
조회수
8,200

 다름이 아니라 다른 외부 인력을 통해서 DB를 설계를 했는데 
제가 확인을 하다보니까 생소한 부분이 있어서요. 
아직 학생티를 못벗은지라 잘 몰라서 여기 계신분들께 질문드릴께요 

보통 레코드의 id값을 레코드가 하나씩 추가될 때마다 autoincreased된 쓰거나 아님 시퀀스로 증가된 값을 쓰는데요, 
제가 받아본 구조에서는 각 테이블에서 증가된 가장 마지막 값을 보관하는 테이블을 따로 두더라구요. 

예를들어 실제로 사용하는 테이블이 A,B,C가 있구요, 이외 테이블S가 있습니다. 
테이블 S의 구조 및 내부 데이터는 
tblName(VARCHAR), indexValue(BIGINT) 
테이블A 10 
테이블B 20 
테이블B 30 
요런식으로 되어있구요. 

즉 테이블A에 값을 넣을때 아래와 같은 쿼리 순으로 진행이 되요 
INSERT INTO tableA(idx, 솰라솰라) VALUES( 
(SELECT indexValue FROM 테이블S WHERE tblName = '테이블A'), '솰라솰라'); 

UPDATE 테이블S SET indexValue = indexValue + 1 

이런방식으로 총 두단계를 거쳐서 값을 넣고, 마지막값을 갱신하는데요. 
저렇게까지 번거롭게 할 필요가 있나요? 
그사람 말로는 mysql버그중에 autoincreased가 잘안되는 경우가 있다던데 제가보기엔 말도안되는 부분인 것 같거든요. 

조언부탁드립니다 

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

 

 

저렇게 하는경우 장점은..

 

count 할때.. 바로 마지막 값만 갖고오면 되죠..

 

저런식으로 설계하는곳도 있습니다.

 

하지만 Insert 하나에 Update 하나가 추가되면 트렌젝션이 두배가 되는거니..

 

모..... 부하가 심하지 않은가 보네요

민족님이 2012-01-11 15:10에 작성한 댓글입니다.
이 댓글은 2012-01-11 17:46에 마지막으로 수정되었습니다. Edit

 auto_increment 잘 안되는 경우는 없다고 보시면 될 것 같습니다.

저렇게 하는 경우 명시적 lock이 필요한데, 그것 또한 단점이죠. 명시적 락 없이 하게 되면 같은 indexValue가 여러 번 사용될 수도 있으니까요.

 

헌데, 저도 InnoDB를 사용할 때에 SELECT COUNT(*) 의 결과 값이 필요해서 유사한 방식을 사용한 적은 있습니다. 다만, INSERT시에는 AUTO_INCREMENT로 하고, COUNT를 보관하는 별도의 테이블에서 UPDATE구문으로 x=x+1로 했었습니다. UPDATE 구문은 atomic하니까요.

 

박현우(lqez)님이 2012-01-11 19:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30189innodb 활성화 [1]
백성호
2012-01-17
9935
30188null 값을 함수에서 반영하지 않기
정우성
2012-01-16
7561
30186동적 프로시져 구현 방법
수호천사
2012-01-13
7642
30185레코드 id생성시 autoincreased나 시퀀스말고 다르게쓰는 경우가있나요? [2]
조송민
2012-01-11
8200
30184sleep 함수에 대하여
jindogg
2012-01-10
7765
30183오라클 시퀀스 mysql로 어떻게 쓰나요?? [1]
오진환
2012-01-05
8480
30182DB설계문제인데요. 부하가 많을지 모르겠습니다 [3]
릭아렌
2012-01-04
7523
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다