[MSSQL] Clustered, Nonclustered 차이

kej_db·2020년 9월 15일
0

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' 발생

profile
좋아서하는 DBA

0개의 댓글