DBMS/MSSQL
[MSSQL] Clustered, Nonclustered 차이
이제이b
2020. 7. 22. 15:36
1-1. Clustered Index
- Clustered Index 키로 데이터 정렬
- 이 키로 데이터를 찾을 경우 'Clustered Index Seek' 발생
- 클러스터형 인덱스는 루트 페이지와 리프 페이지로 구성되며 리프노드가 데이터 페이지에 있기때문에 데이터에 바로 접근 가능
- 행 데이터는 해당 열로 정렬한 후에 루트 페이지를 만들게됨
- 테이블에 한 개만 생성할 수 있으며 어느 열에 생성하느냐에 따라 시스템 성능이 변동됨
- 데이터 입력,수정,삭제시 항상 정렬 상태를 유지
- PK가 고유값 기능만한 하고 조회쿼리에 사용빈도가 없을 경우에는 PK를 Non Clustered로 생성
- PK가 무조건 Clustered Index는 아님
1-2. Clustered Index 선택 기준
- Unique 할 것 : 유니크하지 않은 키를 지정하면 4바이트 식벽자 값이 추가로 부여됨
- 키 길이가 작을 것 : Nonclustered Index 키 길이에 영향을 미치게됨
- Clustered Index가 구성되어 있는 경우에는 Nonclustered Index의 리프 레벨에서 재구성 되기 때문
- 정적인 데이터일 것 : 키 값이 Update 되는 경우 위치 이동이 발생하며 Page Split이 유발됨
2. Nonclustered Index
- 데이터 페이지는 그냥 둔 상태에서 별도의 페이지에 인덱스를 구성
- 인덱스 페이지는 로그파일에 저장되며 페이지를 따로 만들기 때문에 용량을 차지함
- 리프 페이지는 데이터가 아닌 데이터의 위치를 가르키는 RID를 기록
- 이 키로 조회 시 'RID Lookup' 발생
- Clustered Index가 구성되어 있는 경우에 리프레벨에는 RID가 아닌 Clustered Index 키가 기록
- 이 키로 조회 시 Nonclustered 의 리프레벨에서 Clustered 키를 확인 후 이 키로 데이터를 찾는 'Key Lookup' 발생