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
운영게시판
최근게시물
Oracle Q&A 41670 게시물 읽기
No. 41670
오라클에서 채번 관련 문의 드려요 sequence vs max + 1
작성자
소유니(abc1234)
작성일
2018-12-20 15:09
조회수
4,072

 안녕하세요.

오라클에서 유일한 키를 생성하기 위한 채번 관련 문의 드립니다.

 

동시성이 많이 일어나는 특정 테이블들에 무결성 제약 조건 위배 오류가 발생되어 시퀀스 생성으로 변경후 문제가 해결되었는데요

이와 관련해서 선배님들의 의견을 듣고 싶습니다.

 

프로젝트를 위해 흔히들 채번 생성을 위해 max( ) +1 을 이용하는데요.

저의 생각은 

max + 1 을 하기 위해 table full scan 해야 하는 단점도 있고,

insert 할때 다른 세션들의 중복값이 들어갈 위험도 있고 해서,

채번은 max+1 보다는 sequence 를 주로 이용하고 있습니다.

 

효율성, 안정성 등을 고려해 볼때 어떤 방식이 효율적인지 

선배님들의 많은 조언 부탁 드립니다.~~~~ 

 

 

 

기존 쿼리

insert into 테이블 ( pk칼럼, 칼럼1, 칼럼2) values

(

   ( select  max(pk칼럼) + 1 from 테이블 ) 

   , 칼럼1 값,

   , 칼럼2 값......

)

 

변경 쿼리

 

 

 

 

 

(

   테이블시퀀스.NEXTVAL 

   , 칼럼1 값,

   , 칼럼2 값......

)

 

 

 

 

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

- 인덱스 만들고 max() + 1 ==> min/max 계획으로 풀릴겁니다. 

- index_desc 힌트 쓰는 방법 

- 채번 테이블 생성 

- 시퀀스 생성 방법 

 

등이 있습니다. 
 

각각의 용도는 다릅니다. 
1~100000 번의 값이 반드시 1씩 증가해야 된다. (시퀀스로 하면 안됨) 
카드번호 류의 번호 추출 : 1111 2222 이런식으로 나오면 안된다. (채번 테이블을 주로 사용) 
그냥 pk 보장하면서 증가만 하면 된다. --> 시퀀스 
 

 

lucky님이 2018-12-20 15:19에 작성한 댓글입니다.
이 댓글은 2018-12-20 15:23에 마지막으로 수정되었습니다. Edit

lucky 님 답변 감사드립니다.

 

저의 경우 pk만 보장하면 되는 경우라 시퀀스를 이용했습니다.

 

말씀하신 것처럼 시퀀스는 증분되는게 보장이 안되기 때문에

당연히 1씩 증가 해야만 하는  경우에는 쓰지 못하겠죠.

 

또 카드번호류나  별도의 번호 추출 용도 ( ex : D1000000) 에는 별도의 채번 테이블을 이용하는게 맞을 것 같습니다.

전자정부프레임워크에서 쓰이는 채번도 그러한 형태로 알고 있습니다.

 

 

 

소유니(abc1234)님이 2018-12-20 16:36에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41675반차(연차) 행 구분 [2]
IT재벌
2018-12-28
3712
41673insert문장을 추출 하고 싶습니다.!!! [1]
송영일
2018-12-26
3192
41672저장된 컬럼값내의 변수 처리(대입) 문의드립니다. [1]
부러운달
2018-12-21
2851
41670오라클에서 채번 관련 문의 드려요 sequence vs max + 1 [2]
소유니
2018-12-20
4072
41669쿼리 질문입니다. [1]
사아암
2018-12-19
2823
41668프로시저 생성 관련..
권기혁
2018-12-18
2853
41667View의 필드명 조회 [1]
권기혁
2018-12-18
2835
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다