[SQL] INDEX(인덱스) 개념과 성능 최적화 방법
1. 인덱스(INDEX)란?
INDEX(인덱스)는 **데이터 검색 속도를 빠르게 하기 위해 사용하는 데이터베이스 객체**입니다.
도서관의 책을 찾을 때 목차(Index)를 활용하는 것과 비슷한 개념입니다.
2. 기본적인 INDEX 사용법
✅ 인덱스 생성 문법
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
✅ 인덱스 삭제 문법
DROP INDEX 인덱스명;
✅ 인덱스 조회 문법 (오라클)
SELECT * FROM USER_INDEXES WHERE TABLE_NAME = '테이블명';
3. 인덱스의 종류
- ✔ 기본 인덱스 (B-Tree Index) → 가장 일반적으로 사용됨
- ✔ UNIQUE 인덱스 → 중복을 허용하지 않는 인덱스
- ✔ BITMAP 인덱스 → 중복 값이 많은 경우 성능 최적화
- ✔ FUNCTION-BASED 인덱스 → 특정 함수 연산을 기반으로 인덱스 생성
4. INDEX 생성 예제
✅ 기본 인덱스 생성
CREATE INDEX idx_employee_name ON employees(name);
✅ UNIQUE 인덱스 생성
CREATE UNIQUE INDEX idx_employee_email ON employees(email);
✅ 복합(Composite) 인덱스 생성
CREATE INDEX idx_emp_dept ON employees(department_id, job_id);
✅ BITMAP 인덱스 생성 (오라클)
CREATE BITMAP INDEX idx_emp_gender ON employees(gender);
5. 인덱스가 성능을 향상시키는 원리
✔ 인덱스가 없으면 데이터베이스는 **풀 테이블 스캔(Full Table Scan)**을 수행해야 합니다.
SELECT * FROM employees WHERE name = '김철수';
📌 실행 계획 (인덱스 없음)
Execution Plan:
TABLE ACCESS FULL (EMPLOYEES) -- 전체 테이블을 탐색 (느림)
✔ 인덱스를 사용하면 **인덱스를 통해 필요한 데이터만 빠르게 조회할 수 있습니다.**
CREATE INDEX idx_emp_name ON employees(name);
📌 실행 계획 (인덱스 사용)
Execution Plan:
INDEX RANGE SCAN (IDX_EMP_NAME) -- 인덱스를 활용한 검색 (빠름)
6. 인덱스를 사용할 때 주의할 점
- ✔ **인덱스는 자주 조회하는 컬럼에 사용**해야 효과적
- ✔ **자주 변경되는 컬럼에는 인덱스를 신중하게 사용** (UPDATE, DELETE 성능 저하 가능)
- ✔ **인덱스가 많아지면 INSERT, UPDATE 성능이 떨어질 수 있음**
- ✔ **WHERE 절에서 사용되지 않으면 인덱스가 의미 없음**
🔍 결론
- ✔ **INDEX는 검색 성능을 향상시키지만, 무분별한 사용은 오히려 성능 저하를 초래할 수 있음**
- ✔ **SELECT 쿼리 실행 계획(EXPLAIN PLAN)을 확인하여 인덱스 활용 여부를 체크하는 것이 중요**
- ✔ **읽기 성능이 중요한 경우(SELECT)에는 인덱스를 적극적으로 활용**
📖 다른 SQL 개념도 함께 확인하세요!
'SQL & 데이터베이스 > SQL 성능 최적화 & 튜닝' 카테고리의 다른 글
[SQL 성능 최적화 & 튜닝] SQL VIEW와 MATERIALIZED VIEW 차이 및 활용법 (0) | 2025.03.17 |
---|---|
[SQL 성능 최적화 & 튜닝] 오라클 INDEX 종류와 활용법 (B-Tree, Bitmap) (0) | 2025.03.15 |
[SQL] 윈도우 함수(Window Function) 개념과 활용 예제 (0) | 2025.03.13 |
[SQL] 인덱스(INDEX) 활용하여 SQL 성능 최적화하기 (0) | 2025.03.11 |
[SQL] SQL 실행 계획(EXPLAIN PLAN) 분석 및 최적화 (0) | 2025.03.10 |