Skip to content

Clustered Index vs Non-Clustered Index

데이터베이스 테이블에서 검색 속도를 높이기 위해 사용하는 인덱스(Index)의 두 가지 주요 구현 방식.

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

"책의 페이지 자체(데이터)가 목차 순서대로 정렬되어 있는 상태 (예: 국어사전)"

  • 물리적 정렬: 인덱스의 키 값에 따라 테이블의 실제 데이터 행(Row)이 물리적으로 정렬되어 저장된다.
  • 개수 제한: 테이블의 데이터는 한 가지 기준으로만 정렬될 수 있으므로, 테이블당 1개만 생성 가능하다. (보통 Primary Key에 자동 생성됨)
  • 검색 속도: 리프 노드(Leaf Node)가 곧 실제 데이터 페이지이므로, 데이터 접근(Read) 속도가 매우 빠르다.
  • 수정 속도: 데이터가 삽입/수정될 때마다 물리적 정렬을 유지해야 하므로, 쓰기(Write) 작업 시 오버헤드가 크고 페이지 분할(Page Split)이 발생할 수 있다.

2. Non-Clustered Index (논클러스터형 인덱스)

"책의 맨 뒤에 있는 찾아보기(색인). 단어와 그 단어가 있는 페이지 번호가 따로 분리되어 있는 상태"

  • 물리적 정렬 안 함: 실제 데이터 행의 배열 순서와 무관하게 인덱스(목차)만 별도의 공간에 생성된다. 데이터 자체는 정렬되지 않는다.
  • 개수 제한: 테이블당 여러 개 생성 가능하다. (테이블에 따라 제한 개수는 다름)
  • 구조: 리프 노드에는 실제 데이터가 아닌, 데이터가 위치한 **주소 값(RID 또는 클러스터형 인덱스 키)**이 저장되어 있다.
  • 검색/수정 속도: 데이터에 접근하려면 인덱스를 거쳐 주소 값으로 찾아가야 하므로(Book Mark Lookup), Clustered Index보다 읽기 속도는 약간 느리다. 하지만 데이터 정렬을 유지할 필요가 없어 쓰기/수정 성능에 미치는 악영향은 상대적으로 적다.

요약 비교

특징Clustered IndexNon-Clustered Index
물리적 데이터 정렬O (정렬됨)X (정렬 안 됨)
테이블 당 개수1개여러 개 (제한적)
리프 노드의 구성실제 데이터 페이지데이터의 위치 주소 (Pointer)
검색 속도 (Read)매우 빠름빠름 (상대적으로 약간 느림)
수정 속도 (Write)느림 (정렬 오버헤드 큼)상대적으로 빠름
주 사용처Primary Key, 범위 검색(BETWEEN, <, >)JOIN, WHERE 절에 자주 쓰이는 컬럼