개발/SQL
🚀 SQL 효율적인 데이터 접근: VIEW, INDEX, SEQUENCE 완벽 가이드 (Oracle 기준)
예니03
2025. 2. 26. 08:38
반응형
데이터베이스에서 성능과 관리 효율을 높이기 위해 VIEW, INDEX, SEQUENCE는 꼭 알아야 할 필수 개념입니다! 🌱 실무에 자주 쓰이는 이유와 함께 쉽게 이해할 수 있는 예시로 설명드립니다. 😊
🎯 목차
- VIEW: 복잡한 쿼리를 재사용하는 방법
- INDEX: 빠른 데이터 검색을 위한 비법
- SEQUENCE + TRIGGER: 자동 번호 생성 및 조건 처리
- 실무 활용 팁과 주의사항 💡
📝 1. VIEW (뷰)
✅ VIEW란?
- 복잡한 SQL 쿼리를 저장해 재사용할 수 있는 가상 테이블입니다.
- 실제 데이터를 저장하지 않고, 원본 테이블을 조회합니다.
🛠️ 언제 사용할까?
- 복잡한 쿼리를 자주 반복할 때 🌀
- 보안상 특정 컬럼만 사용자에게 보여줄 때 🔒
- 여러 테이블을 JOIN한 결과를 간단하게 관리할 때 🗂️
📘 예시
-- 복잡한 쿼리 없이 부서별 평균 급여를 자주 조회하고 싶을 때
CREATE VIEW dept_avg_salary AS
SELECT d.department_name, AVG(e.salary) AS avg_salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;
-- VIEW 사용 시
SELECT * FROM dept_avg_salary;
✅ 장점: 반복 쿼리를 단순화하고 가독성 향상! 🚀
✅ 주의: VIEW는 원본 데이터를 참조하므로 원본 변경 시 결과도 바뀝니다.
⚡ 2. INDEX (인덱스)
✅ INDEX란?
- 테이블의 특정 컬럼에 대해 빠른 검색을 가능하게 하는 자료 구조입니다.
- 책의 색인처럼, 원하는 페이지를 빠르게 찾을 수 있게 도와줍니다. 📖
🚦 언제 사용할까?
- WHERE 절이나 JOIN 조건에서 자주 사용되는 컬럼 🔎
- ORDER BY나 GROUP BY 성능을 높이고 싶을 때 📊
📘 예시
-- employees 테이블의 name 컬럼에 인덱스 생성
CREATE INDEX idx_employee_name ON employees(name);
-- 인덱스 사용 전후 성능 차이 확인
SELECT * FROM employees WHERE name = 'Alice';
✅ 효과: 대규모 테이블 조회 속도가 대폭 향상됩니다! 🚀
⚠️ 주의: 인덱스 남용 시 데이터 입력/수정 시 오히려 느려질 수 있음. 중요한 컬럼에만 사용하세요.
🔢 3. SEQUENCE + TRIGGER (자동 번호 및 조건 처리)
✅ SEQUENCE란?
- 자동으로 연속된 숫자를 생성하는 객체입니다. (주로 기본키에 사용) 🔢
✅ TRIGGER란?
- INSERT, UPDATE, DELETE 시 자동으로 실행되는 프로시저입니다.
- SEQUENCE와 함께 사용해 자동 번호 생성 및 조건 처리가 가능! 💡
📘 예시: 직원 추가 시 자동으로 employee_id 부여하기
-- 시퀀스 생성
CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;
-- 트리거 생성 (INSERT 시 자동 번호 할당)
CREATE TRIGGER emp_id_trigger
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
:NEW.employee_id := emp_seq.NEXTVAL;
END;
-- 사용 예시
INSERT INTO employees (name, department_id, salary) VALUES ('David', 20, 5000);
✅ 결과: employee_id 자동 생성되어 일일이 입력할 필요 없음! 🙌
✅ 실무 활용: 중복 방지, 번호 일관성 유지에 필수.
💡 4. 실무 활용 팁과 주의사항
🎯 VIEW 사용 시
- 가독성은 높지만, 너무 복잡한 VIEW 중첩은 성능 저하 발생할 수 있음 ⚠️
- 주기적으로 사용하지 않는 VIEW는 제거해 관리하세요. 🧹
🚀 INDEX 사용 시
✅ 자주 검색하는 컬럼에만 적용!
❌ 모든 컬럼에 인덱스 사용 시 오히려 느려짐 ⚠️
✅ 인덱스 사용 후 EXPLAIN PLAN으로 성능 확인 📊
🔑 SEQUENCE + TRIGGER 사용 시
✅ 기본키 자동 생성으로 중복 오류 예방
✅ 트리거 로직이 과도하면 성능 문제 발생할 수 있음
✅ 예외 처리를 꼼꼼히! 🛡️
반응형