인덱스의 종류
SQL Server 에서는 인덱스의 종류로 크게 Clustered Index 와 Non Clustered Index 를 지원합니다.
Clustered Index 는 해당 키를 기준으로 물리적으로 정렬되어지는,
Non Clustered Index 는 해당 키를 기준으로 논리적으로 정렬되어 지게 됩니다.
SQL Server 에 Primary Key 를 생성하는 경우 기본적으로는 Clustered Index 로 생성됩니다.
그러나 Primary Key 를 Non Clustered Index 로 생성한 후 Clustered Index 를 다른 컬럼으로도 생성할 수 있습니다.
Clustered Index 는 가장 좋은 성능을 발휘하지만 테이블에서 한개밖에 생성할 수 없기 때문에,
해당 테이블을 조회하는 쿼리 중 가장 많은 조건에 부합하는 컬럼으로 하는게 좋습니다.
( 보통은 Primary Key 를 기준으로 조회를 많이 하기 때문에 Primary Key 를 Clustered Index 로 잡는 경우가 많습니다. )
Clustered Index 선택 기준
클러스터 인덱스를 삼는 기준은 다음과 같습니다.
1. Unique 할 것 : 그렇지 않은 경우 4 바이트의 식별자 값이 추가로 부여됩니다.
2. 키 길이가 작을 것 : 그렇지 않은 경우 Non Clustered Index 의 키 길이에 영향을 미치게 됩니다.
3. 정적인 데이터일 것 : 아니면 키 값이 Update 되는 경우 위치 이동이 발생하며 Page Split 이 유발됩니다.
그러나 보통 Clustered Index 는 OLTP 보다는 OLAP 성인 경우가 많습니다. 그래서 아래의 조건도 같이 충족해야 합니다.
1. 대량 범위 조건을 가지는지
2. 공통 조건으로 사용하는지
3. 조인 조건으로 사용되는지
클러스터 PK 인덱스 VS 넌 클러스터 PK 인덱스
많은 경우에 PK 인덱스는 Clustered Index 가 될 수 있습니다.
위에서 말한 것 처럼 보통은 공통된 쿼리에서 PK를 조건으로 많이 사용하기 때문입니다.
그래서 평범하게 생각하면 Primary Key 는 Clustered Index 이다. 라고 생각할 수 있습니다.
그러나 예를 들어 PK 가 고유값 기능만 하고, 조회쿼리에서는 사용빈도가 없다면 어떻게 해야할까요?
PK 는 Non Clustered 로 생성되어야 하고, 조회쿼리에서 공통조건으로 사용하는 다른 컬럼을 Clustered Index 로 생성하는게 더 좋습니다.
제가 전달하고 싶은 의미는,
Primary Key 는 Clustered Index 이어야 한다 라는 생각을 가지면 안된다는 것 입니다.
데이터의 성격에 따라, 쿼리의 유형에 따라 어떤 컬럼을 Clustered Index 로 설정할 것인지를 결정한 후에,
해당 컬럼이 Primary Key 의 유형이 될 수 있는지 없는지를 파악하는 것이 더 좋습니다.
넌 클러스터 인덱스
일반 B-Tree 인덱스 입니다.
클러스터 인덱스의 기준에 포함되지 않은 컬럼 중 조건에 포함되는 컬럼들로 구성하면 됩니다.
다만, 클러스터 인덱스가 구성되어 있는 경우에는 클러스터 인덱스의 리프 레벨에서 재구성 됩니다.
이렇기 때문에 클러스터 인덱스의 키 값이 긴 경우에는 넌 클러스터 인덱스의 키 값의 길이도 길어지게 됩니다.
이 포스팅은 개념만 기록하였으며, 실제 동작 방식은 다른 포스팅에서 진행하겠습니다.
실제 동작 방식 포스팅 : https://mozi.tistory.com/320
'SQL Server > SQL Server 기타' 카테고리의 다른 글
[MSSQL] CheckPoint (검사점) 주기 설정하기 (0) | 2019.06.03 |
---|---|
[MSSQL] 클러스터 인덱스, 넌 클러스터 인덱스, 클러스터 인덱스 + 넌 클러스터 인덱스 구조 (1) | 2019.05.23 |
[MSSQL] OPENROWSET, OPENDATASOURCE, OPENQUERY 와 Linked Server 성능, 장단점, 원격 접속 방법 (0) | 2019.05.22 |
[MSSQL] SQL Server 멀티 인스턴스 구조 (3) | 2019.05.21 |
[MSSQL] SQL Server 아키텍처, 저장소 구조, 메모리 구조 (1) | 2019.05.20 |