일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Animation
- page
- Binding
- 마우이
- typescript
- Flutter
- AnimationController
- React JS
- 파이어베이스
- Maui
- 리엑트
- 함수
- Firebase
- 플러터
- GitHub
- MS-SQL
- 자바스크립트
- MVVM
- MSSQL
- JavaScript
- listview
- .NET
- 바인딩
- spring boot
- 애니메이션
- 오류
- 닷넷
- db
- HTML
- 깃허브
Archives
- Today
- Total
개발노트
15. [MS-SQL] 클러스터 인덱스(Clustered Index) 본문
반응형
클러스터 인덱스(Clustered Index)
클러스터 인덱스(Clustered Index)는 데이터베이스 테이블의 데이터를 정렬된 순서로 저장하는 인덱스 구조입니다. 클러스터 인덱스는 테이블의 데이터가 인덱스 키의 순서에 따라 물리적으로 정렬되도록 합니다. 각 테이블에는 하나의 클러스터 인덱스만 존재할 수 있습니다.
(통상적으로 PK를 인덱스를 잡는다.)
클러스터 인덱스의 주요 특징
- 물리적 정렬:
- 클러스터 인덱스는 테이블의 데이터가 인덱스 키 값의 순서에 따라 물리적으로 정렬되도록 합니다. 이는 데이터 검색 시 빠른 접근을 가능하게 합니다.
- 삽입(Insert), 삭제(Delete), 수정(Update)로 데이터 페이지에 변환이 일어난다면, 전체 정렬이 필요함
- 하나의 클러스터 인덱스:
- 하나의 테이블에는 하나의 클러스터 인덱스만 존재할 수 있습니다. 이는 테이블의 물리적 순서를 결정하기 때문입니다.
- 데이터 페이지와 인덱스 페이지가 동일:
- 클러스터 인덱스의 경우 인덱스 페이지와 데이터 페이지가 동일합니다. 즉, 인덱스의 리프 노드가 실제 데이터 페이지를 가리킵니다.
- 데이터 중복 불가능:
- 클러스터 인덱스 키 값은 고유해야 합니다. 만약 키 값이 고유하지 않다면, 데이터베이스 시스템은 고유성을 보장하기 위해 내부적으로 고유 식별자를 추가할 수 있습니다.
클러스터 인덱스의 사용 목적
클러스터 인덱스는 주로 데이터의 물리적 정렬을 통해 검색 성능을 최적화하는 데 사용됩니다. 다음과 같은 상황에서 유용합니다:
- 범위 검색 최적화:
- 특정 범위 내의 데이터를 자주 검색하는 경우 클러스터 인덱스를 사용하면 성능이 향상됩니다.
- 순차적 데이터 접근:
- 데이터를 순차적으로 접근하는 경우(예: 날짜 순으로) 클러스터 인덱스가 유리합니다.
- 주요 키로 자주 검색:
- 테이블의 주요 키로 데이터를 자주 검색하는 경우 클러스터 인덱스를 사용하면 효율적입니다.
- 정렬된 결과 반환:
- 쿼리에서 정렬된 결과를 자주 반환해야 하는 경우 클러스터 인덱스를 사용하면 정렬 비용이 줄어듭니다.
클러스터 인덱스의 예시
클러스터 인덱스를 생성하고 사용하는 방법을 예시를 통해 살펴보겠습니다.
1. 기본 키를 통한 클러스터 인덱스 생성
기본 키를 설정할 때 자동으로 클러스터 인덱스가 생성됩니다.
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int,
OrderDate datetime
);
위 예제에서 OrderID 열에 기본 키 제약 조건이 설정되었고, 이로 인해 OrderID에 클러스터 인덱스가 자동으로 생성됩니다.
2. 클러스터 인덱스를 명시적으로 생성
기본 키가 아닌 다른 열에 클러스터 인덱스를 생성할 수도 있습니다.
CREATE CLUSTERED INDEX idx_order_date
ON Orders (OrderDate);
이 예제에서는 OrderDate 열에 클러스터 인덱스를 생성합니다. 이제 Orders 테이블의 데이터는 OrderDate 열의 값에 따라 정렬됩니다.
클러스터 인덱스의 사용 예시
클러스터 인덱스가 있는 테이블에서 데이터를 검색할 때의 예시입니다.
-- 클러스터 인덱스를 사용한 데이터 검색
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2024-01-01' AND '2024-12-31';
이 쿼리는 OrderDate를 기준으로 데이터를 검색하며, 클러스터 인덱스를 사용하여 범위 검색 성능이 향상됩니다.
클러스터 인덱스의 장점과 단점
장점:
- 빠른 범위 검색: 물리적 정렬로 인해 범위 검색이 매우 빠릅니다.
- 순차적 데이터 접근 최적화: 순차적으로 데이터를 접근할 때 성능이 향상됩니다.
- 정렬 비용 감소: 정렬된 결과를 반환하는 쿼리에서 성능이 향상됩니다.
단점:
- 데이터 삽입/삭제 성능 저하: 데이터의 물리적 정렬을 유지해야 하므로, 삽입과 삭제 연산의 성능이 저하될 수 있습니다.
- 한 개의 클러스터 인덱스만 허용: 테이블당 하나의 클러스터 인덱스만 생성할 수 있습니다.
- 페이지 분할: 삽입 시 새로운 데이터가 기존 데이터 중간에 위치해야 하는 경우 페이지 분할이 발생할 수 있습니다.
클러스터 인덱스는 데이터베이스의 성능 최적화에 중요한 역할을 하지만, 사용 시 주의가 필요합니다. 데이터 삽입 및 삭제가 빈번한 경우 클러스터 인덱스의 성능 저하를 유발할 수 있으므로, 테이블의 사용 패턴에 따라 신중하게 설계해야 합니다.
반응형
'DB > MS-SQL' 카테고리의 다른 글
17. [MS-SQL] 인덱스가 걸려있는 칼럼 조회하기 (0) | 2024.06.05 |
---|---|
16. [MS-SQL] 논클러스터 인덱스(Non-Clustered Index) (1) | 2024.05.31 |
14. [MS-SQL] 인덱스 조회하기 (0) | 2024.05.31 |
13. [MS-SQL] Merge Into 사용법 (0) | 2024.03.15 |
12. [MS-SQL] 특정 칼럼을 가지고 있는 테이블 조회하기 (0) | 2023.06.08 |
Comments