본문 바로가기
DataBase

SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점

by 대박플머 2024. 8. 12.

 

SQL Server에서 인덱스는 데이터 검색 성능을 최적화하는 데 중요한 역할을 합니다. 클러스터드 인덱스와 비클러스터드 인덱스는 각각의 특성과 용도가 다르며, 이를 이해하는 것이 데이터베이스 성능 향상에 도움이 됩니다. 이번 글에서는 SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점과 작동 원리를 자세히 살펴보겠습니다.

 

Clustered Index란?

클러스터드 인덱스는 테이블의 데이터 자체가 인덱스 구조에 맞게 정렬되어 저장됩니다. 클러스터드 인덱스를 생성하면 데이터 행들이 인덱스 키 값에 따라 정렬됩니다. 테이블당 하나의 클러스터드 인덱스만 만들 수 있습니다.

 

Clustered Index의 작동 원리

  1. 데이터 정렬:
    • 클러스터드 인덱스는 테이블의 물리적 데이터 순서를 인덱스 키 순서와 일치시키므로, 데이터가 인덱스 키에 따라 정렬되어 저장됩니다.
  2. 데이터 접근:
    • 클러스터드 인덱스를 사용한 쿼리는 정렬된 데이터에 직접 접근할 수 있어 검색 속도가 빠릅니다.
    • 클러스터드 인덱스의 루트 페이지에서 시작하여, 브랜치 페이지를 통해 리프 페이지로 내려가며 데이터를 찾습니다. 리프 페이지에는 실제 데이터 행이 포함됩니다.
  3. 성능:
    • 기본 키, 외래 키 등 자주 사용되는 열에 클러스터드 인덱스를 설정하면 검색 성능이 크게 향상됩니다.
    • 클러스터드 인덱스는 삽입, 업데이트, 삭제 시 데이터의 물리적 순서를 유지해야 하므로, 빈번한 데이터 변경이 발생하는 경우 성능에 영향을 미칠 수 있습니다.

Clustered Index 예시

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,  -- 기본 키는 자동으로 클러스터드 인덱스가 생성됨
    Name NVARCHAR(100),
    Department NVARCHAR(100)
);

 

 

Non-Clustered Index란?

비클러스터드 인덱스는 데이터 자체가 아닌, 데이터의 위치를 가리키는 포인터를 저장합니다. 하나의 테이블에 여러 개의 비클러스터드 인덱스를 생성할 수 있습니다.

Non-Clustered Index의 작동 원리

  1. 인덱스 구조:
    • 비클러스터드 인덱스는 인덱스 키 값과 해당 데이터 행의 위치를 포함하는 포인터를 저장합니다.
    • 인덱스 구조는 트리 형태를 가지며, 루트 페이지, 브랜치 페이지, 리프 페이지로 구성됩니다.
  2. 데이터 접근:
    • 비클러스터드 인덱스를 사용한 쿼리는 먼저 인덱스를 통해 데이터 위치를 찾은 후, 실제 데이터를 검색합니다.
    • 리프 페이지는 인덱스 키와 데이터의 포인터를 포함하며, 이를 통해 데이터 행에 접근합니다.
  3. 성능:
    • 비클러스터드 인덱스는 특정 열에 대한 빠른 검색을 가능하게 하지만, 데이터가 인덱스에 따라 정렬되지 않으므로, 범위 검색보다는 특정 값 검색에 더 효율적입니다.
    • 비클러스터드 인덱스는 여러 개를 생성할 수 있어 다양한 검색 요구를 충족할 수 있습니다.

Non-Clustered Index 예시

CREATE TABLE Employees (
    EmployeeID INT,
    Name NVARCHAR(100),
    Department NVARCHAR(100),
    PRIMARY KEY (EmployeeID)  -- 클러스터드 인덱스
);

CREATE NONCLUSTERED INDEX idx_department ON Employees(Department);  -- 비클러스터드 인덱스

 

 

Clustered Index와 Non-Clustered Index의 주요 차이점

  1. 데이터 저장 방식:
    • 클러스터드 인덱스: 데이터 행이 인덱스 키 순서에 따라 물리적으로 정렬되어 저장됩니다.
    • 비클러스터드 인덱스: 인덱스는 데이터의 포인터를 저장하며, 실제 데이터는 원래 테이블에 저장됩니다.
  2. 검색 속도:
    • 클러스터드 인덱스: 정렬된 데이터를 직접 접근할 수 있어 검색 속도가 빠릅니다.
    • 비클러스터드 인덱스: 인덱스를 통해 데이터 위치를 찾은 후 데이터에 접근하므로, 클러스터드 인덱스보다는 검색 속도가 다소 느릴 수 있습니다.
  3. 수정 작업:
    • 클러스터드 인덱스: 삽입, 삭제, 업데이트 시 데이터의 물리적 순서를 유지해야 하므로, 빈번한 데이터 변경이 있을 경우 성능에 영향을 줄 수 있습니다.
    • 비클러스터드 인덱스: 데이터 변경 시 포인터만 수정하면 되므로, 클러스터드 인덱스보다는 성능에 덜 영향을 받습니다.

결론

클러스터드 인덱스와 비클러스터드 인덱스는 각각의 특성과 용도가 다르며, 데이터베이스 성능을 최적화하기 위해 적절히 사용되어야 합니다. 클러스터드 인덱스는 데이터가 정렬되어 저장되므로 검색 속도가 빠르고, 비클러스터드 인덱스는 다양한 검색 요구를 충족할 수 있는 유연성을 제공합니다. SQL Server에서 이 두 인덱스를 적절히 활용하여 데이터베이스 성능을 최적화해보세요.