일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오라클
- mysql
- ASP
- C#
- 트리플DES
- ascx.cs
- 프로그래머스
- springboot
- 쿼리
- 다중pk
- 데이터베이스
- oracle
- CrossSiteScripting
- windows7
- db
- 이미지엑박
- PHP
- memoryDB
- VMWare
- 코딩테스트
- mssql
- 다중기본키
- 자바스크립트
- 자동증가열
- SQL
- 스프링부트
- 가상머신
- javascript
- HTML
- 람다식함수
- Today
- Total
개발바닥 아방수
[MSSQL] 클러스터 PK 인덱스와 넌 클러스터 PK 인덱스, 넌 클러스터 인덱스 기준 본문
인덱스의 종류
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/319
'데이터베이스 > MS-SQL' 카테고리의 다른 글
[MSSQL] 커서 사용법 & 예제 (0) | 2023.01.04 |
---|---|
[DB] MSSQL 자동증가열(IDENTITY)사용법 (0) | 2022.11.23 |