My Record/이론 및 공부
[DATABASE] 시퀀스(Sequence) 와 MAX +1 의 차이
썸머워즈
2019. 2. 18. 17:03
반응형
시퀀스(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은 풀스캔을 하기 때문에 성능상 매우 좋지 않다.
되도록 시퀀스를 쓰기를 바란다.
반응형