안녕하세요. SQLER의 코난 김대우입니다. 
이번 강좌에서는, 12-6. 인덱스 생성과 관리 - 클러스터형 vs 비클러스터형 인덱스를 진행 하겠습니다.


SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록

 

이번에 진행할 강좌는 인덱스 생성과 관리 - 클러스터형 vs 비클러스터형 인덱스입니다.

 

 

 

TL;DR

클러스터형과 비클러스터형 인덱스의 차이를 설명합니다. 비클러스터형 인덱스는 RID 포인팅 정보를 가지며, 인덱스 크기가 비교적 크고 선택도에 따라 쿼리 최적화기의 사용 여부가 결정됩니다.

 


클러스터형 vs 비클러스터형 인덱스

비클러스터형 인덱스는 이렇게 RID 포인팅 정보를 가지게 되므로 인덱스의 크기가 클러스터형에 비해 조금 더 큽니다. 아울러 탐색 비용이 있기 때문에 선택도가 높으면 쿼리 최적화기는 비클러스터형 인덱스를 사용하지 않습니다. 일반적으로 3% 이하 선택도일 경우 비클러스터형 인덱스를 사용합니다. 비클러스터형 인덱스는 행 데이터를 물리적으로 재배열하지 않으므로 여러 개의 인덱스를 생성할 수 있습니다. 한 테이블당 최대 생성 가능 개수는 999개입니다. 두 인덱스의 차이를 간략히 비교한다면 다음과 같습니다.

 
구분
클러스터형 인덱스 비클러스터형 인덱스
차이 물리적으로 행을 재배열 물리적으로 행을 재배열하지 않음
크기 비교적 작음 클러스터형 인덱스 보다 큼
선택도 30~35% 이하면 사용 3% 이하일 경우 사용
최대 개수 테이블당 1개 테이블당 999개

 

 

클러스터형 인덱스가 있는 테이블에서 비클러스터형 인덱스 탐색

마지막으로, 클러스터형 인덱스가 있는 테이블에서 비클러스터형 인덱스 구조와 탐색 패턴을  알아보겠습니다. 회원 이름 컬럼에 비클러스터형 인덱스를 생성했다고 가정합니다.

 

132-7 비클러스터형 클러스터형 탐색.png

이미지 - 클러스터형, 비클러스터형 인덱스 탐색


회원 번호에 클러스터형 인덱스가 걸린 상태고, 회원이름에 비클러스터형 인덱스가 설정된 상태입니다. 먼저 비클러스터형 인덱스만 있는 경우와 다르게 비클러스터형 인덱스의 RID는 더 이상 RID가 아닌 클러스터형 인덱스의 키값을 가지게 됩니다.


실제 탐색 과정을 예를 들어 진행합니다. 비클러스터형 인덱스가 걸린 회원이름 컬럼에서 “김태리” 이름을 조회합니다.


구교환 < 김태리 < 박서준 이므로 비클러스터형 인덱스의 중간레벨 1페이지로 이동합니다. 김태리를 찾으니 김태리는 클러스터형 인덱스 8번 키값을 가지고 있습니다. 8 값을 가지고 클러스터형 인덱스 페이지로 가니 8은 데이터페이지 3에 있다고 합니다. 데이터페이지 3으로 가니 바로 8 김태리 정보를 찾을 수 있게 됩니다. 

 

132-8 비클러스터형 클러스터형 탐색 예제.png

이미지 -  클러스터형, 비클러스터형 탐색 예제


위와 같은 패턴으로 비클러스터형 인덱스 - 클러스터형 인덱스 - 데이터페이지 순서로 탐색하게 됩니다. 만약 “유연석”을 찾으려 한다면 어떻게 탐색할까요? 


송혜교 < 유연석 < 한소희 이므로 비클러스터형 인덱스 중간레벨의 3페이지로 이동합니다.  클러스터형 인덱스의 키값 13을 확인합니다. 클러스터형 인덱스를 확인하니, 13은 데이터페이지 5번에 존재합니다. 데이터 페이지 5번에서 유연석 데이터를 최종적으로 찾게 됩니다. 


인덱스의 탐색 패턴은 내부적인 부분이고 처음 접하면 어렵지만, DBMS에서 성능에 가장 큰 영향을 미치는 중요한 데이터베이스 기능이니 꼭 천천히 다시 이해하시고 다음 강좌로 진행하시길 바랍니다.


다음 강좌에서는 인덱스를 여러 가지 방법으로 생성하고 실행하겠습니다.
 

 

SQL 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022 

책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 21817
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12242
2314 SQL강좌: 14-7. 트랜잭션과 잠금처리 - 교착상태(데드락-DeadLock) 관리 [1] 코난(김대우) 2023.08.18 150
2313 SQL강좌: 14-6. 트랜잭션과 잠금처리 - 잠금 관리 file 코난(김대우) 2023.08.18 37
2312 SQL강좌: 14-5. 트랜잭션과 잠금처리 - 잠금과 트랜잭션 격리 수준 코난(김대우) 2023.08.18 24
2311 SQL강좌: 14-4. 트랜잭션과 잠금처리 - 잠금(Lock)과 블로킹 코난(김대우) 2023.08.18 46
2310 SQL강좌: 14-3. 트랜잭션과 잠금처리 - 트랜잭션과 체크포인트 [1] file 코난(김대우) 2023.08.18 91
2309 SQL강좌: 14-2. 트랜잭션과 잠금처리 - 트랜잭션 종류 코난(김대우) 2023.08.18 51
2308 SQL강좌: 14-1. 트랜잭션과 잠금처리 - 트랜잭션 이해 코난(김대우) 2023.08.18 57
2307 SQL강좌: 13-5. 백업과 복원 - 로그 전달, Always On 고가용성과 재해 복구 구현 file 코난(김대우) 2023.08.18 27
2306 SQL강좌: 13-4. 백업과 복원 - 유지 관리 계획 수립 file 코난(김대우) 2023.08.18 41
2305 SQL강좌: 13-3. 백업과 복원 - 백업과 복원 전략 실행 file 코난(김대우) 2023.08.18 31
2304 SQL강좌: 13-2. 백업과 복원 - 백업과 복원 전략 file 코난(김대우) 2023.08.18 33
2303 SQL강좌: 13-1. 백업과 복원 - 백업과 복원 이해 file 코난(김대우) 2023.08.18 45
2302 SQL강좌: 12-9. 인덱스 생성과 관리 - DTA(데이터베이스 엔진 튜닝 관리자) file 코난(김대우) 2023.08.18 41
2301 SQL강좌: 12-8. 인덱스 생성과 관리 - 인덱스 재구성/재구축 코난(김대우) 2023.08.18 36
2300 SQL강좌: 12-7. 인덱스 생성과 관리 - 인덱스 옵션 코난(김대우) 2023.08.18 43
» SQL강좌: 12-6. 인덱스 생성과 관리 - 클러스터형 vs 비클러스터형 인덱스 file 코난(김대우) 2023.08.18 35
2298 SQL강좌: 12-5. 인덱스 생성과 관리 - 비클러스터형 인덱스 file 코난(김대우) 2023.08.18 30
2297 SQL강좌: 12-4. 인덱스 생성과 관리 - 클러스터형 인덱스 file 코난(김대우) 2023.08.18 34
2296 SQL강좌: 12-3. 인덱스 생성과 관리 - 인덱스 생성 file 코난(김대우) 2023.08.18 29
2295 SQL강좌: 12-2. 인덱스 생성과 관리 - 인덱스 종류 코난(김대우) 2023.08.18 60





XE Login