본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

클러스터링 인덱스(Clustering Index, 클러스터드 인덱스)는 데이터 파일이 그 인덱스의 탐색 키 값 순서로 정렬되어 저장되어 있을 때, 그 정렬 키에 대해 정의한 인덱스이다.

인덱스는 데이터 파일의 물리적 순서와의 관계에 따라 둘로 나뉜다. 탐색 키 순서와 데이터 파일의 저장 순서가 같으면 클러스터링 인덱스, 탐색 키 값과 무관한 순서로 레코드가 저장된 파일에 정의한 인덱스는 비클러스터링 인덱스(nonclustering index, 보조 인덱스)이다.[1] 같은 키 값을 가진 레코드들이 한곳에 모여(clustered) 있으므로 범위 검색과 같은 값의 여러 레코드 검색에 특히 유리하다.

교과서마다 이름을 붙이는 범위가 조금 다르다.

  • Silberschatz 는 정렬된 파일에서 그 정렬 순서를 정하는 탐색 키의 인덱스를 클러스터링 인덱스라 하고, 기본 인덱스(primary index)와 같은 말로 쓴다. 이때 탐색 키가 기본 키일 필요는 없다.[1]
  • Elmasri·Navathe 는 정렬 키가 키 필드(값이 모두 다름)이면 기본 인덱스, 정렬 키가 비키 필드(값이 중복됨)이면 클러스터링 인덱스라고 나눈다. 클러스터링 인덱스는 서로 다른 값마다 엔트리를 하나 두고, 그 값을 가진 레코드가 들어 있는 첫 데이터 블록을 가리킨다.[2]

어느 정의를 따르든 "탐색 키 값에 따라 정렬된 데이터 파일에 정의된 인덱스"라는 점은 같다.

  • 데이터 파일은 한 가지 순서로만 정렬되므로 클러스터링 인덱스는 테이블당 하나이다. 나머지 인덱스는 모두 비클러스터링이다.
  • 정렬 순서를 이용할 수 있으므로 희소 인덱스로 만들 수 있다. 비클러스터링 인덱스는 레코드가 흩어져 있어 밀집 인덱스여야 한다.
  • 범위 조건(BETWEEN, 부등호)으로 많은 행을 읽을 때 연속된 블록만 읽으면 되어 디스크 접근이 적다. 비클러스터링 인덱스로 많은 행을 읽으면 행마다 다른 블록을 읽게 되어 전체 스캔보다 느려질 수도 있다.
  • 레코드를 넣을 때 정렬 순서를 지켜야 하므로 삽입·갱신 비용이 크다.
  • 제품에서는 SQL Server 의 클러스터형 인덱스, MySQL InnoDB 의 기본 키 인덱스, Oracle 의 인덱스 구성 테이블(IOT)이 이런 구조를 쓴다.

비클러스터링 인덱스와 구별하기

편집 원본 편집
구분 클러스터링 인덱스 비클러스터링(보조) 인덱스
데이터 파일 순서 탐색 키 순서로 정렬 탐색 키와 무관
테이블당 개수 하나 여러 개
밀집/희소 희소 가능(보통 블록당 한 엔트리) 밀집이어야 한다
범위 검색 유리 행이 많으면 불리
다른 이름 기본 인덱스(Silberschatz) 보조 인덱스(secondary index)
  1. ↑ 1.0 1.1 Silberschatz, Korth, Sudarshan, 「Database System Concepts 7th Edition - Chapter 14: Indexing」 강의 슬라이드, https://www.db-book.com/slides-dir/PDF-dir/ch14.pdf, 확인일: 2026-11-04.
  2. ↑ Elmasri, Navathe, 「Fundamentals of Database Systems - Chapter 14: Indexing Structures for Files」 강의 슬라이드(Purdue University CS448), https://cs.purdue.edu/homes/bb/cs448_Fall2016/lecture-files/pdf/ch14-Indexing%20Structures%20for%20Files.pdf, 확인일: 2026-11-04.