SQL/Oracle
[Oracle] 시퀀스(Sequence)를 이용한 글번호 매기기와 증가 이상
jane.dev
2021. 9. 17. 23:05
반응형
Oracle에서 시퀀스와 테이블을 생성함
CREATE SEQUENCE spe_num;
CREATE TABLE spe_tbl(
bno NUMBER(10, 0) PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
content VARCHAR2(2000) NOT NULL,
writer VARCHAR2(50) NOT NULL,
regdate DATE default SYSDATE,
updatedate DATE default SYSDATE
);
Oracle에는 MySQL에서 자동으로 증가하는 번호인 AUTO_INCREMENT가 없기 때문에 SEQUENCE를 생성해서 사용
spe_num이라는 시퀀스에는 처음에 0이 저장됨
그리고 PRIMARY KEY가 들어갈 자리에 시퀀스명.nextval이라고 작성하면 실행시마다 1씩 증가된 새로운 값을 그 위치에 넣어줌
INSERT INTO spe_tbl (bno, title, content, writer)
VALUES (spe_num.nextval, 'testtitle', 'testcontent', 'testwriter');
이렇게 여러번에 걸쳐 값을 넣다보니 20씩 증가해서 넣어지는 것을 발견함
→ 시퀀스에 cache 옵션이 선택되어있음
cache란 시퀀스 번호를 한번에 여러개씩 메모리에 할당해 매번 시퀀스 번호를 생성하지 않으므로 속도도 증가시키고 CPU 사용도 줄임
SELECT SEQUENCE_NAME, CACHE_SIZE FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'SPE_NUM';
해당 시퀀스의 캐시 사이즈를 조회하니 20으로 되어있는 것을 확인
아래 구문을 사용해 캐시 옵션을 사용하지 않도록 설정이 가능하지만
빈번하게 INSERT되는 테이블의 경우, 과도한 CPU 사용을 불러올 수 있음
ALTER SEQUENCE SPE_NUM NOCACHE;