728x90
반응형
시퀀스(Sequence) 와 MAX +1 의 차이
일련번호 같이 기본키를 잡을만한 컬럼의 고유번호를 지정할 때 자동증분을 많이 이용하고는 한다.
보통 시퀀스(Sequence) 또는 MAX + 1 을 사용할텐데, 현업에서는 아직도 MAX + 1을 사용하는 곳이 많다고 한다.
이 둘의 가장 큰 차이점은 무엇일까?
일단 하나 들어보자면 데이터 중복의 허용과 비허용을 말할 수 있다.
예를 들어보자.
한번에 10명의 사용자가 동시접속을 해서 게시글을 작성했다고 생각해보자.
그렇다면 총 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 같은 경우에는 중복이 발생할 수 없다는 점이다.
시퀀스는 크리티컬 세션이 보장되기 때문에 절대 데이터의 중복처리가 되질 않는다.
MAX + 1은 현재 가장 큰 값에 + 1을 시켜주는 것이기 때문에 중복이 될 확률이 높다.
일단 차이점에 대해 작성을 해봤는데, 개인적인 생각으로는 MAX + 1을 써야하는 이유가 전혀 없다고 생각된다.
개발이 편해서? 시퀀스도 편하다. 시퀀스를 생성하는게 번거로워서? 그냥 생성문만 실행시켜주면 끝이다.
그리고 성능을 많이 신경써야 하는 부분에 있어서 MAX + 1은 풀스캔을 하기 때문에 성능상 매우 좋지 않다.
되도록 시퀀스를 쓰기를 바란다.
728x90
반응형
'Web Programming > database' 카테고리의 다른 글
오라클 최근 수정된 데이터 조회 또는 특정 날짜 시간 데이터 조회 (0) | 2023.03.02 |
---|---|
[Oracle] LISTAGG WITHIN GROUP (0) | 2021.04.20 |
오라클 조인 이너조인 내부조인 (0) | 2021.03.27 |
오라클 아우터 조인 외부조인 (0) | 2021.03.27 |
ORA-ROWSCN (0) | 2018.09.13 |