클러스터 인덱스 3줄 요약
- 클러스터 인덱스는 데이터 위치를 결정하는 키 값
- MySQL의 PK는 클러스터 인덱스
- MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있음
클러스터 인덱스는 데이터 위치를 결정
클러스터 키의 중요한 핵심 : 정렬을 이루고 정렬된 순서에 따라서 데이터의 주소가 결정되는 것
클러스터 키 4번이 Insert
정리
- 클러스터 키의 위치에 따라 데이터의 주소가 결정됨
- 클러스터 키 순서에 따라서 데이터 저장 위치가 변경된다 → 클러스터 키 삽입/갱신시에 성능이슈 발생
MySQL의 PK는 클러스터 인덱스
- PK 순서에 따라서 데이터 저장 위치가 변경됨 → PK 키 삽입/갱신 시에 성능 이슈 발생
- PK로 Auto Increment vs UUID 찾아보기
MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다.
- PK의 사이즈가 인덱스의 사이즈를 결정
- PK가 클러스터 인덱스이기 때문에 PK가 인서트되거나 업데이트되면, PK에 해당되는 주소가 변경됨 → 만약 인덱스들이 PK가 아닌 데이터 주소를 직접 가지고 있다면, 데이터 순서가 바뀔 때 인덱스도 같이 갱신이 되어야 함 → 부하가 훨씬 많이 든다.
- 따라서 인덱스는 PK를 들고 있고, PK의 데이터 위치가 변경될 때 인덱스에 미치는 영향이 덜 하다.
- 세컨더리 인덱스만으로는 데이터를 찾아갈 수 없다. → PK 인덱스를 항상 검색해야 함
- 세컨더리 인덱스 (PK를 제외한 모든 인덱스 → 인덱스가 가지고 있는 것은 데이터의 주소가 아닌 PK이기 때문) → PK 인덱스를 항상 검색해야 함
- 따라서 세컨더리 인덱스 → PK → 데이터 주소 이렇게 찾아가야 함
클러스터 인덱스 장점
- PK를 활용한 검색이 빠름. 특히 범위 검색 (PK의 순서가 곧 데이터 주소의 순서이기 때문)
- 세컨더리 인덱스들이 PK를 가지고 있어 커버링에 유리 → 굉장히 중요한 특징
예시
실제로는 인덱스 키가 정렬되어있고, PK는 정렬되어 있지 않음
Cherry를 찾다보면 Cherry가 2번 PK를 가지고 있다는 것을 알게되고 → PK 인덱스로 넘어감
PK 인덱스로 넘어오게 되면?
- 항상 보조 인덱스들은 모두 PK 인덱스를 한번 거치게 됨
- 보존 인덱스의 리프 노드들은 PK를 들고 있다.
2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.
'🔍 CS > 데이터베이스' 카테고리의 다른 글
페이지네이션 최적화 - 01. 페이지네이션이란 (0) | 2023.06.06 |
---|---|
조회 최적화를 위한 인덱스 이해하기 - 08. 인덱스를 다룰 때 주의해야 할 점 (0) | 2023.06.04 |
조회 최적화를 위한 인덱스 이해하기 - 03. 인덱스 자료구조 (0) | 2023.06.04 |
조회 최적화를 위한 인덱스 이해하기 - 02. 인덱스 기본동작 (0) | 2023.06.04 |
조회 최적화를 위한 인덱스 이해하기 - 01. 데이터베이스 성능 핵심 (0) | 2023.06.04 |