728x90
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: 현재 세션에서 이미 호출된 가장 최근 값
연습 문제
- 뷰 생성
- 급여가 2000 이상이고 커미션이 있는 직원만 보여주는 뷰 보너스_직원_VIEW를 만들어 보세요.
- 인덱스 생성
- DEPARTMENTS 테이블의 LOCATION_ID 컬럼에 인덱스 idx_dept_loc를 생성해 보세요.
- 시퀀스 활용
- 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 |
댓글