본문 바로가기
데이터베이스

[SQL] 4. 뷰(View), 인덱스(Index), 시퀀스(Sequence)

by 우공80 2025. 5. 19.
728x90

[SQL] 4. 뷰(View), 인덱스(Index), 시퀀스(Sequence)

1. 뷰(View)

뷰는 하나 이상의 테이블을 조합하여 만든 가상의 테이블입니다. 복잡한 SELECT 문을 이름 붙여 재사용하거나, 특정 컬럼·행만 노출할 때 유용합니다.

1-1. 뷰 생성

CREATE OR REPLACE VIEW 직원_연봉_VIEW AS
SELECT EMPLOYEE_ID,
       FIRST_NAME,
       LAST_NAME,
       SALARY,
       DEPARTMENT_ID
FROM   EMPLOYEES
WHERE  SALARY > 3000;

1-2. 뷰 사용

SELECT *
FROM   직원_연봉_VIEW
ORDER  BY SALARY DESC;

1-3. 뷰 장단점

  • 장점
    • 복잡한 쿼리를 단순화
    • 권한 분리: 민감한 컬럼은 뷰에선 제외 가능
  • 단점
    • 업데이트 가능한 뷰인지 확인 필요
    • 너무 많은 뷰는 관리 부담

2. 인덱스(Index)

인덱스는 검색 성능을 높이기 위해 특정 컬럼에 추가하는 구조입니다. 다만, DML(INSERT/UPDATE/DELETE) 성능에는 약간의 오버헤드가 생깁니다.

2-1. 기본 인덱스 생성

CREATE INDEX idx_emp_salary
ON EMPLOYEES(SALARY);

2-2. 유니크 인덱스

CREATE UNIQUE INDEX idx_emp_email
ON EMPLOYEES(EMAIL);

2-3. 사용 예시

  • WHERE SALARY > 5000 같은 조건에서 idx_emp_salary가 있으면 빠르게 조회 가능
  • 복합 컬럼도 지원:
CREATE INDEX idx_emp_dept_hire
ON EMPLOYEES(DEPARTMENT_ID, HIREDATE);

3. 시퀀스(Sequence)

시퀀스는 일련번호를 자동으로 생성해 주는 오브젝트입니다. 주로 기본 키 값을 자동 증가시킬 때 사용합니다.

3-1. 시퀀스 생성

CREATE SEQUENCE emp_seq
  START WITH 1000
  INCREMENT BY 1
  NOCACHE;
  • START WITH: 시작 번호
  • INCREMENT BY: 증분
  • NOCACHE/CACHE: 메모리 캐시 수량

3-2. 시퀀스 사용

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY)
VALUES (emp_seq.NEXTVAL, 'JANE', 'DOE', 4000);
  • NEXTVAL: 다음 값
  • CURRVAL: 현재 세션에서 이미 호출된 가장 최근 값

연습 문제

  1. 뷰 생성
    • 급여가 2000 이상이고 커미션이 있는 직원만 보여주는 뷰 보너스_직원_VIEW를 만들어 보세요.
  2. 인덱스 생성
    • DEPARTMENTS 테이블의 LOCATION_ID 컬럼에 인덱스 idx_dept_loc를 생성해 보세요.
  3. 시퀀스 활용
    • project_seq라는 시퀀스를 START WITH 500으로 만들고, 이를 이용해 PROJECTS 테이블에 새 프로젝트를 삽입해 보세요.

이렇게 세 가지 주요 객체를 다루면, 데이터베이스 성능 최적화와 편리한 쿼리 재사용이 가능해집니다. 다음으로는 트랜잭션(Transaction)잠금(Locking), 동시성 제어(Concurrency Control) 에 대해 알아보겠습니다.

728x90

'데이터베이스' 카테고리의 다른 글

[SQL] 5. 윈도우 함수(Window Functions)  (0) 2025.05.19
[SQL] 3.집합 연산(SET OPERATIONS)  (0) 2025.05.19
[SQL] 1. JOIN  (0) 2025.05.19

댓글