클러스터 인덱스(Clustered Index)
실제 데이터가 저장되는 물리적 순서를 결정하는 인덱스이다.
마치 도서관에서 책을 도서번호순으로 실제로 배열하는 것과 같다. 테이블당 단 하나만 가질 수 있으며, 보통 프라이머리 키(PK)가 클러스터 인덱스가 된다.
✅ 사용되는 예시: "StudentID가 2인 학생을 찾아라"
- 클러스터 인덱스를 통해 바로 해당 위치로 이동이 가능하다.
- 매우 빠른 검색이 가능하다.
CREATE TABLE Students (
StudentID INT PRIMARY KEY, -- 클러스터 인덱스가 됨
Name VARCHAR(50),
Grade INT
);
넌클러스터 인덱스(Non-Clustered Index)
실제 데이터의 물리적 순서와는 무관하며, 별도의 공간에 정렬된 인덱스를 저장한다.
도서관의 카드 목록처럼, 원하는 책의 위치를 찾을 수 있는 참조 정보만을 담고 있다. 테이블당 여러 개를 가질 수 있다.
✅ 사용되는 예시: "이름이 '박민준'인 학생을 찾아라"
- Name 넌클러스터 인덱스에서 '박민준'을 찾는다.
- 해당하는 StudentID(3)를 확인한다.
- 그 StudentID를 사용해 실제 데이터에 접근한다.
✅ 사용되는 예시2: "3학년 학생들을 모두 찾아라"
- Grade 넌클러스 인덱스에서 Grade 3을 찾는다.
- 해당하는 StudentID {1,4}를 확인한다.
- 각 StudentID로 실제 데이터에 접근한다.
CREATE INDEX idx_name ON Students(Name); -- 넌클러스터 인덱스 생성
CREATE INDEX idx_grade ON Students(Grade); -- 추가 넌클러스터 인덱스
클러스터 인덱스 VS 넌클러스터 인덱스
클러스터 인덱스 | 넌클러스터 인덱스 | |
성능 | - 데이터 검색이 매우 빠름 - 데이터 삽입/수정/삭제는 물리적 재정렬이 필요해 상대적으로 느림 |
- 검색 시 추가적인 조회 과정이 필요해 느림 - 데이터 변경이 더 용이함 |
저장 공간 | - 데이터 자체의 순서를 정의하므로 추가 공간이 거의 필요 없음 | - 별도의 인덱스 페이지가 필요해 추가 저장 공간을 사용 |
용도 | - 자주 범위 검색을 하거나, 정렬된 경과가 필요한 열에 적합 | - 특정 값을 검색하는 경우나 조인 연산에 자주 사용되는 열에 적합 |
# 현업에서의 넌클러스트 인덱스 사용도
- PK외 모든 인덱스는 넌클러스터드 인덱스로 사용된다.
- PK로만 해결되지 않는 상황 발생시, 해당 테이블에 인덱스를 생성하기도 하는데 이럴 때 생성되는 것들이 모두 넌클러스터드 인덱스이다.
결론적으로 넌클러스트 인덱스는 아주 자주 쓰인다.
특징을 잘 알아두고 실제로 자주 사용되는 검색 조건을 기준으로 쓰거나 하는 등.. 성능을 높일 수 있는 상황에서 사용하면 무척 유용하게 쓰일 것이다.
'Development > CS' 카테고리의 다른 글
[자료구조] 트라이(Trie) (0) | 2025.02.08 |
---|---|
[면접을 위한 CS 전공 지식 노트] 5장. 자료구조 (0) | 2025.01.29 |
[면접을 위한 CS 전공 지식 노트] 4장. 데이터베이스 (0) | 2025.01.22 |
신입 개발자를 위한 CS 면접 대비 질문 - 운영체제편 (0) | 2025.01.17 |
[면접을 위한 CS 전공 지식 노트] 3.4 CPU 스케줄링 알고리즘 (1) | 2025.01.15 |