[DATABASE] 시퀀스(Sequence) 와 MAX +1 의 차이

2022-03-05

일련번호, 채번 즉 기본키를 잡을만한 컬럼의 고유번호를 지정할때 자동증분을 사용하는데

(여기서 채번이란 말을 많이들 쓰는데 알아보니 일본의 영향을 받은 단어라 한다. 일련번호를 쓰는게 나을거같다.)

보통 시퀀스(Sequence)나 MAX+1을 사용하곤 한다.

현업에서는 아직도 max+1을 사용하는 곳이 많다고들 한다.

이 둘의 가장 큰 차이점은 무엇일까?

일단 데이터 중복의 허용과 비허용이다.

예를 들어보자면

한번에 10명의 사용자가 동시접속을 해서 게시글을 작성했다 예를 들어보자

ex)

총 10번의 INSERT가 진행될것이다.

각각 INSERT에서 일련번호에 대한 입력값을

MAX + 1

Sequence.NEXTVAL

를 사용했다 치면 각각의 값들은 이런식으로 나올 수 있다.

MAX + 1 -> (1,1,2,3,4,5,5,6,7,8)

Sequence.NEXTVAL -> (1,2,3,4,5,6,7,8,9,10)

MAX 는 중복이 될수도 있고 sequence 같은경우는 중복이 일어나지 않는다

만약 여기서 pk를 잡아줬다면 max+1에서 당연히 에러가 발생하게된다.

sequence 는 크리티컬 세션이 보장 되기 때문에 절대 데이터의 중복처리가 되질 않는다

반면 max+1 은 우리가 현재 가장 큰값에 +1을 시켜주는 것이기 때문에 중복이될 확률이 높다

(그럼에도 max를 사용하고 싶다면 try catch 문으로 서너번은 돌려줘야한다. 중복됐을때 처리)

max +1 을 사용하는 이유는 Sequence처럼 Object를 생성하는 번거로움을 줄일 수 있어 보다 편하고 빠르게 진행이 가능하여 사용하는 경우다

하지만 max 즉 최대값을 찾기 위해 해당 table을 Full scan 하기 때문에 성능상 시퀀스가 유리하다 볼 수 있다.

(각각 장단점이 있기때문에 상황에 따라 사용하면 되겠지만 일련번호에 기본키를 잡을거면 시퀀스의 사용을 권장하고싶다. 물론 개인적인 생각이다.)

출처: https://mine-it-record.tistory.com/63