클러스터 인덱스
- 클러스터 인덱스는 데이터 위치를 결정하는 키 값이다.
- MySQL의 PK는 클러스터 인덱스다.
- MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다.
EX : 클러스터키가 4번인 데이터가 insert 된다 > 3번과 5번 사이에 들어가니 5번이 뒤로 밀림(F로)
클러스터키 데이터 주소
1 A
2 B
3 C
4 D (정렬)
5 (F) (뒤로 밀림)
- 클러스터 키 순서에 따라서 데이터 저장 위치가 변경된다!
> 클러스터 키 삽입/갱신 때 성능 이슈가 발생할 수 있다.
> MySQL의 PK는 클러스터 인덱스다.
Q. Pk로 Auto Increment vs UUID > 인터넷에 찾아보기
- MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다. (=세컨더리 인덱스)
- PK의 사이즈가 인덱스의 사이즈를 결정함
> 인덱스가 데이터 주소를 가지지 않고, PK를 가지고 있으면, 데이터 insert/update시 부하가 줄어듬 / 주소를 직접 가지고 있으면, 데이터 insert/update시, 인덱스도 갱신되어야 하므로 느림
- 세컨더리 인덱스만으로는 데이터를 찾아갈 수 없다. (세컨더리 인덱스란, PK를 제외한 인덱스 들)
> 세컨더리 인덱스로 PK 인덱스를 항상 검색해야함 > 즉 세컨더리 인덱스로 PK를 찾고 그 PK로 데이터를 찾아감
[클러스터 인덱스의 장점]
- PK를 활용한 검색이 빠름, 특히 범위검색
- 세컨더리 인덱스들이 PK를 가지고 있어 커버링에 유리 > 커버링은 인덱스 테이블 자체만으로도 데이터의 응답을 내려줄 수 있어서 실제 테이블까지 안가도 됨
[클러스터 인덱스의 동작]
1) Pk 인덱스 동작방식
[노드1]
인덱스키 주소
Apple 2 (노드2)
-->
[노드2]
인덱스키 주소
Carrot 5 (노드5)
-->
[노드5] (리프노드)
인덱스키 PK
Cherry 2 -> PK 인덱스에 요청 -> 데이터
2) 기본
[노드1]
인덱스키 주소
1 2 (노드2)
-->
[노드2]
인덱스키 주소
2 4 (노드4)
-->
[노드4] (리프노드)
인덱스키 데이터주소
2 64 -> 데이터
'Database > MySQL' 카테고리의 다른 글
인덱스와 자료구조 (0) | 2022.10.25 |
---|---|
데이터베이스 성능의 핵심 (0) | 2022.10.25 |
중복 데이터를 반드시 정규화 해야하는가? (0) | 2022.10.25 |