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

SQL 인덱스(Index) 최적 활용법: 클러스터형 vs 비클러스터형

Jinsapp 2025. 3. 19. 21:12

[SQL] SQL 인덱스(Index) 최적 활용법: 클러스터형 vs 비클러스터형

1. 인덱스(Index)란?

인덱스(Index)는 데이터베이스 검색 성능을 최적화하기 위한 구조입니다.

책의 목차처럼, 인덱스를 활용하면 전체 테이블을 스캔하는 대신 필요한 데이터 위치를 빠르게 찾을 수 있습니다.

2. 인덱스의 종류

종류 설명
클러스터형 인덱스 (Clustered Index) 데이터가 실제 정렬된 상태로 저장되며, 테이블당 하나만 생성 가능
비클러스터형 인덱스 (Non-Clustered Index) 데이터가 원래 순서와 무관하며, 하나의 테이블에 여러 개 생성 가능

---

3. 클러스터형 인덱스 (Clustered Index)

클러스터형 인덱스는 테이블의 실제 데이터가 정렬된 상태로 저장되는 인덱스입니다.

한 테이블에는 **하나의 클러스터형 인덱스만 생성 가능**합니다.

✔ 클러스터형 인덱스 예제

-- Primary Key는 기본적으로 클러스터형 인덱스를 생성함
CREATE TABLE employees (
    emp_id NUMBER PRIMARY KEY,
    name VARCHAR2(100),
    department VARCHAR2(50)
);

✅ 특징:

-  테이블의 물리적 저장 순서를 결정

-  한 개의 테이블에 하나만 존재 가능

-  검색 속도가 빠름(특히 범위 검색 시 효과적)

-  INSERT/DELETE 성능이 저하될 수 있음 (데이터 정렬 유지 필요)

✔ 클러스터형 인덱스를 활용한 검색 예제

SELECT * FROM employees WHERE emp_id = 1001;

✅ 검색 최적화:

- `emp_id`가 클러스터형 인덱스로 설정되었으므로 빠르게 검색 가능

- 범위 검색 (BETWEEN, ORDER BY 등)에서 뛰어난 성능을 보임

4. 비클러스터형 인덱스 (Non-Clustered Index)

비클러스터형 인덱스는 데이터 저장 순서와 무관하게 별도의 인덱스 페이지에 저장됩니다.

한 테이블에 여러 개의 비클러스터형 인덱스를 생성할 수 있습니다.

✔ 비클러스터형 인덱스 예제

-- 특정 컬럼에 대한 비클러스터형 인덱스 생성
CREATE INDEX idx_employee_name ON employees(name);

✅ 특징:

- 데이터 정렬과 무관하게 저장

- 한 개의 테이블에 여러 개 생성 가능

- 조회 성능 향상 (WHERE 절 조건에 적합)

- INSERT/UPDATE 성능에 영향*(인덱스 추가/삭제 필요)

✔ 비클러스터형 인덱스를 활용한 검색 예제

SELECT * FROM employees WHERE name = 'John Doe';

✅ 검색 최적화: -

`name` 컬럼에 비클러스터형 인덱스가 설정되어 있으면, 전체 테이블 스캔 없이 빠르게 검색 가능

- 다만, ORDER BY 또는 범위 검색에는 성능이 떨어질 수 있음

5. 클러스터형 vs 비클러스터형 인덱스 비교

구분 클러스터형 인덱스 비클러스터형 인덱스
데이터 정렬 실제 데이터가 인덱스 순서로 저장됨 데이터 저장 순서와 무관
테이블당 개수 1개 (Primary Key에 기본 생성) 여러 개 가능
조회 성능 범위 검색 (ORDER BY, BETWEEN) 최적화 단일 조회 (WHERE 조건) 최적화
INSERT/DELETE 성능 데이터 정렬 유지 필요 → 성능 저하 가능 데이터 정렬 무관 → 상대적으로 영향 적음

---

6. 인덱스 성능 최적화 팁

  • ✔ **자주 조회하는 컬럼에 인덱스 적용 (WHERE, JOIN, ORDER BY에서 사용되는 컬럼)**
  • ✔ **너무 많은 인덱스 생성 시 INSERT/UPDATE 성능 저하 발생 가능 → 필요한 인덱스만 유지**
  • ✔ **조인(JOIN) 성능을 높이려면 조인되는 컬럼에 인덱스 설정**
  • ✔ **클러스터형 인덱스는 범위 검색이 많은 경우에 유리, 비클러스터형 인덱스는 WHERE 조건에 최적화**

---

📌 정리

  • ✔ **클러스터형 인덱스:** 데이터가 인덱스 순서대로 정렬됨 → 범위 검색 최적
  • ✔ **비클러스터형 인덱스:** 저장 순서와 무관 → WHERE 조건 검색 최적
  • ✔ **테이블당 1개 클러스터형 인덱스 가능, 비클러스터형 인덱스는 여러 개 가능**
  • ✔ **조인, ORDER BY, WHERE 절에 자주 사용되는 컬럼에 적절한 인덱스 적용**

🔗 다른 SQL 성능 최적화 관련 글도 함께 확인해보세요!

SQL 실행 계획(EXPLAIN PLAN) 분석 및 최적화 방법