인덱스(Index) 란?
인덱스는 데이터베이스에서 데이터를 빠르게 검색하기 위해 사용되는 데이터 구조이다.
책의 목차나 색인처럼, 인덱스는 특정 데이터에 대한 위치 정보를 제공하여 검색 속도를 향상시킨다.
클러스터 인덱스(Clustered Index) vs 비 클러스터 인덱스(Non Clustered Index)
클러스터 인덱스(Clustered Index)
- 클러스터 인덱스는 테이블의 데이터가 물리적으로 정렬되어 저장되는 인덱스이다.
- 인덱스 Leaf Node에 실제 데이터를 가진다.
- 주로 PK로 잡힌 인덱스 키값을 기준으로 데이터를 정렬하는데, INSERT 할 경우에도 전체 정렬이 된다.
- 테이블 당 클러스터 인덱스는 1개만 생성 가능하다.
- 데이터를 검색하면 키를 기반으로 직접 데이터 페이지를 찾아간다.
- 데이터가 정렬되어 있어서 범위 검색(BETWEEN, >, < 등)에 효율적이다.
- 클러스터 인덱스 생성 시, B-Tree 구조로 저장된다.

* 리프 노드(Leaf Node)란?
트리 구조에서 가장 아래에 위치한 노드로, 더 이상 하위 노드를 가지지 않는 노드를 말한다.
비 클러스터 인덱스(Non-Clustered Index)
- 데이터는 테이블에 저장되고, 인덱스는 키 값과 함께 위치 값(포인터)을 포함해 저장된다.
- 리프 노드는 클러스터 인덱스와 다르게 데이터 행의 위치를 나타내는 위치 값(포인터)를 저장한다.
- 테이블당 여러 개의 인덱스를 생성할 수 있다. (최대 999개)
- 데이터의 물리적 저장 순서와 관계없이 별도로 정렬된 상태를 유지한다.
- 겁색 조건에 해당하는 특정 열만 인덱싱 할 수 있어서 빠른 검색이 가능하다.
- 데이터의 저장 순서와 상관없이, 원하는 열에 대해 독립적으로 인덱스를 생성할 수 있다.
- 비클러스터형 인덱스 탐색 -> 위치값 확인 -> 실제 데이터 위치에 접근 (여러 작업을 해야 함)
- 비클러스터형 인덱스가 많을수록 데이터 삽입, 삭제, 업데이트 시 인덱스 유지 관리에 큰 비용이 든다.
- 특정 쿼리 조건에만 유리해서 테이블 전체 스캔 시에는 성능 향상에 제한적이다.

'코딩 공부 기록 > SQL' 카테고리의 다른 글
[SQL] 인덱스 조각화 (0) | 2024.11.25 |
---|---|
[MSSQL] 인덱스의 스캔 방식 (2) | 2024.11.22 |
[MSSQL] 로컬 서버 사용하기 (SSMS, SQL Server Developer) (0) | 2024.11.22 |
[SQL] 데이터베이스 정규화 (1NF, 2NF, 3NF, BCNF, 4NF, 5NF) (2) | 2024.11.12 |
[MSSQL] 메모리 할당 최대/최소 설정 (0) | 2024.11.12 |