SMALL
1. 시퀀스(Sequence)
시퀀스는 고유한 숫자를 생성하는 객체다. 주로 기본 키(primary key) 값 생성 시 사용된다. 자동으로 증가하는 정수 값을 제공해서 고유한 값을 생성하는 데 쓰인다.
사용 예시:
- 기본 키 값 생성: user_id, order_id처럼 각 레코드를 식별할 수 있는 고유한 값이 필요할 때 사용된다.
- 일련 번호 생성: 자동으로 증가하는 번호가 필요할 때 사용된다.
사용 방법:
-- 시퀀스 생성
CREATE SEQUENCE seq_user_id
START WITH 1 -- 시작값 퀀스 번호의 시작 값을 지정할 때 사용 [START WITH N]
INCREMENT BY 1 -- 증가 값
NOCACHE; -- 캐시 사용 안 함 (optional)
MAXVALUE N | NOMAXVALUE : MAXVALUE는 시퀀스가 가질 수 있는 최대값을 지정. NOMAXVALUE 는 10^27 또는 -1 로 설정
MINVALUE N | NOMINVALUE : MINVALUE는 시퀀스가 가질 수 있는 최소값을 지정. NOMINVALUE는 1 또는 10^26 로 설정
CYCLE | NOCYCLE : CYCLE은 시퀀스 값이 최대값까지 증가하면 다시 START WITH 옵션에 지정한 시작 값에서 시퀀스를 다시 시작하도록 함. NOCYCLE은 증가 완료시 에러 유발
CACHE | NOCACHE : CACHE는 메모리상의 시퀀스 값을 관리하도록 하는 것이며 기본값은 20. NOCACHE는 원칙적으로 메모리상에서 시퀀스를 관리하지 않음
-- 시퀀스 값을 사용하는 예시
SELECT seq_user_id.NEXTVAL FROM dual; -- 다음 값
SELECT seq_user_id.CURRVAL FROM dual; -- 현재 값
사용되는 상황:
- 자동 증가 번호를 생성할 때 유용하다. 예를 들어, INSERT 문을 사용할 때 자동으로 고유 번호를 생성하는 데 사용된다.
- 트랜잭션에서 동시성 문제를 방지하고 고유성을 보장할 수 있다.
- 기본 키나 다른 고유 값을 설정할 때 적합하다.
2. 인덱스(Index)
인덱스는 데이터베이스의 검색 성능을 향상시키는 구조다. 인덱스를 사용하면 테이블에서 데이터를 빠르게 조회할 수 있다. 데이터베이스에서 특정 컬럼에 대해 자주 조회가 이루어지면 인덱스를 생성해서 성능을 최적화할 수 있다.
사용 예시:
- 검색 성능 향상: 테이블에서 특정 조건으로 검색할 때 인덱스가 성능을 크게 향상시킬 수 있다.
- 정렬 성능 향상: 특정 컬럼을 기준으로 정렬할 때 유용하다.
- JOIN 성능 향상: 두 테이블을 JOIN할 때 사용되는 컬럼에 인덱스를 추가해서 성능을 높일 수 있다.
사용 방법:
-- 인덱스 생성
CREATE INDEX idx_user_name ON users(name);
-- 인덱스를 활용한 쿼리
SELECT * FROM users WHERE name = 'John'; -- 'name' 컬럼에 인덱스가 있다면 성능이 빨라진다
사용되는 상황:
- 테이블에서 특정 컬럼에 대해 자주 검색이나 정렬이 필요할 때 사용된다.
- JOIN을 자주 사용하는 테이블 간의 관계에서 성능을 최적화할 때 사용된다.
- 고유한 값을 보장하고 싶을 때 (UNIQUE INDEX) 사용된다.
주요 차이점:
- 목적: 시퀀스는 고유한 숫자를 생성하는 데 사용되고, 인덱스는 검색 성능을 향상시키는 데 사용된다.
- 작동 방식: 시퀀스는 값을 하나씩 증가시키는 반면, 인덱스는 테이블의 데이터를 빠르게 검색할 수 있도록 도와주는 데이터 구조다.
요약
- 시퀀스는 자동으로 증가하는 고유 값을 제공하는 객체로, 주로 기본 키나 일련 번호 생성에 사용된다.
- 인덱스는 테이블의 데이터를 빠르게 검색할 수 있도록 도와주는 데이터 구조로, 자주 조회되는 컬럼에 대해 성능을 향상시킬 수 있다.
이 두 가지는 성능 최적화와 데이터 무결성 유지를 위해 중요한 역할을 한다.
LIST
'BackEnd' 카테고리의 다른 글
| [ORACLE] 날짜 계산 시 INTERVAL vs ADD_MONTHS() 중 무엇이 더 적합할까 ? (0) | 2025.03.09 |
|---|---|
| ORACLE과 MYSQL의 차이점 (2) | 2025.02.02 |
| [JAVA] 디자인 패턴이란 ? 자주 쓰이는 디자인 패턴은 ? (0) | 2025.01.12 |
| [JAVA] 비동기처리, @RequestBody 와 @ResponseBody 그리고 @ModelAttribute와의 차이점 (1) | 2025.01.11 |
| [JAVA] 컬렉션 Collection 정리 (LIST, SET, MAP) (2) | 2025.01.05 |