-
클러스터 인덱싱 vs. 논클러스터 인덱싱: 데이터베이스 인덱싱 기초카테고리 없음 2024. 6. 26. 14:23
데이터베이스 성능 최적화를 위해 인덱스(Index)는 매우 중요한 역할을 합니다. 특히 클러스터 인덱스와 논클러스터 인덱스는 데이터를 효율적으로 검색하는 데 핵심적인 요소입니다. 이번 포스트에서는 클러스터 인덱스와 논클러스터 인덱스의 개념, 차이점, 장단점, 그리고 사용 예시에 대해 알아보겠습니다.
클러스터 인덱스(Clustered Index)란?
클러스터 인덱스는 테이블 내의 데이터 행들이 물리적으로 정렬된 순서에 따라 저장되는 인덱스입니다. 즉, 클러스터 인덱스가 생성되면 해당 인덱스의 키 값을 기준으로 테이블의 데이터가 재정렬됩니다. 하나의 테이블에는 하나의 클러스터 인덱스만 생성할 수 있습니다.
예시
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), BirthDate DATE ); CREATE CLUSTERED INDEX idx_EmployeeID ON Employees(EmployeeID);
위 예시에서 EmployeeID 열에 클러스터 인덱스를 생성했습니다. 이제 Employees 테이블의 데이터는 EmployeeID를 기준으로 물리적으로 정렬됩니다.
장점
- 빠른 데이터 검색: 클러스터 인덱스는 물리적으로 정렬되어 있어 검색 속도가 빠릅니다.
- 범위 쿼리 효율성: 특정 범위의 데이터를 검색할 때 유리합니다.
단점
- 데이터 삽입/수정/삭제 시 오버헤드: 데이터를 물리적으로 재정렬해야 하므로 삽입, 수정, 삭제 작업 시 오버헤드가 발생합니다.
- 테이블 당 하나만 생성 가능: 클러스터 인덱스는 테이블 당 하나만 생성할 수 있습니다.
논클러스터 인덱스(Non-clustered Index)란?
논클러스터 인덱스는 데이터 행들이 물리적으로 정렬되지 않고, 인덱스 자체가 별도의 저장 공간에 저장되는 인덱스입니다. 논클러스터 인덱스는 여러 개 생성할 수 있으며, 인덱스는 테이블의 데이터 행을 참조합니다.
예시
CREATE TABLE Orders ( OrderID INT PRIMARY KEY, OrderDate DATE, CustomerID INT, TotalAmount DECIMAL(10, 2) ); CREATE NONCLUSTERED INDEX idx_OrderDate ON Orders(OrderDate);
위 예시에서 OrderDate 열에 논클러스터 인덱스를 생성했습니다. 이 인덱스는 OrderDate를 기준으로 정렬된 인덱스 페이지를 별도로 저장하며, 해당 인덱스를 통해 데이터 행을 참조합니다.
장점
- 여러 개 생성 가능: 하나의 테이블에 여러 개의 논클러스터 인덱스를 생성할 수 있습니다.
- 특정 열에 대한 검색 속도 향상: 인덱스가 생성된 열에 대해 검색 속도가 빨라집니다.
단점
- 추가 저장 공간 필요: 인덱스가 별도의 저장 공간을 필요로 합니다.
- 삽입/수정/삭제 시 오버헤드: 인덱스를 유지관리하기 위해 추가적인 작업이 필요합니다.
클러스터 인덱스 vs. 논클러스터 인덱스 비교
특징클러스터 인덱스논클러스터 인덱스
특징 클러스터 인덱스 논클러스터 인덱스 데이터 정렬 데이터 행이 물리적으로 정렬됨 인덱스만 정렬됨 생성 가능 수 테이블 당 하나 여러 개 저장 공간 데이터 파일에 직접 저장 별도의 인덱스 저장 공간 필요 검색 속도 매우 빠름 클러스터 인덱스보다는 느림 삽입/수정/삭제 성능 느림 상대적으로 빠름 결론
클러스터 인덱스와 논클러스터 인덱스는 각각 장단점이 있으며, 사용 목적과 상황에 따라 적절히 선택하여 사용해야 합니다. 클러스터 인덱스는 범위 검색이나 빈번한 읽기 작업에 유리하며, 논클러스터 인덱스는 다양한 검색 조건에 대해 유연하게 대처할 수 있습니다. 데이터베이스 성능을 최적화하기 위해 인덱스를 효과적으로 활용하는 것이 중요합니다.