본문 바로가기

SQL & 데이터베이스/SQL 성능 최적화 & 튜닝

[SQL] INDEX(인덱스) 개념과 성능 최적화 방법

[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 성능 최적화 가이드 보러 가기