본문 바로가기
CS/데이터베이스

조회 최적화를 위한 인덱스 이해하기 - 04. 클러스터 인덱스

by 컴쏘 2023. 6. 4.
728x90

클러스터 인덱스 3줄 요약

  1. 클러스터 인덱스데이터 위치를 결정하는 키 값
  2. MySQL의 PK클러스터 인덱스
  3. MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있음

클러스터 인덱스는 데이터 위치를 결정

이런 상황에서 클러스터 키 4번이 Insert

클러스터 키의 중요한 핵심 : 정렬을 이루고 정렬된 순서에 따라서 데이터의 주소가 결정되는 것

 

클러스터 키 4번이 Insert

4번은 3번과 5번사이에 들어가야 함

정리

  • 클러스터 키의 위치에 따라 데이터의 주소가 결정됨
  • 클러스터 키 순서에 따라서 데이터 저장 위치가 변경된다 → 클러스터 키 삽입/갱신시에 성능이슈 발생

MySQL의 PK는 클러스터 인덱스

  • PK 순서에 따라서 데이터 저장 위치가 변경됨 → PK 키 삽입/갱신 시에 성능 이슈 발생
  • PK로 Auto Increment vs UUID 찾아보기

MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다.

  • PK의 사이즈가 인덱스의 사이즈를 결정
  • PK가 클러스터 인덱스이기 때문에 PK가 인서트되거나 업데이트되면, PK에 해당되는 주소가 변경됨 → 만약 인덱스들이 PK가 아닌 데이터 주소를 직접 가지고 있다면, 데이터 순서가 바뀔 때 인덱스도 같이 갱신이 되어야 함 → 부하가 훨씬 많이 든다.
    • 따라서 인덱스는 PK를 들고 있고, PK의 데이터 위치가 변경될 때 인덱스에 미치는 영향이 덜 하다.
  • 세컨더리 인덱스만으로는 데이터를 찾아갈 수 없다. → PK 인덱스를 항상 검색해야 함
    • 세컨더리 인덱스 (PK를 제외한 모든 인덱스 → 인덱스가 가지고 있는 것은 데이터의 주소가 아닌 PK이기 때문) → PK 인덱스를 항상 검색해야 함
    • 따라서 세컨더리 인덱스 → PK → 데이터 주소 이렇게 찾아가야 함

클러스터 인덱스 장점

  1. PK를 활용한 검색이 빠름. 특히 범위 검색 (PK의 순서가 곧 데이터 주소의 순서이기 때문)
  2. 세컨더리 인덱스들이 PK를 가지고 있어 커버링에 유리 → 굉장히 중요한 특징

예시

실제로는 인덱스 키가 정렬되어있고, PK는 정렬되어 있지 않음

Cherry를 찾다보면 Cherry가 2번 PK를 가지고 있다는 것을 알게되고 → PK 인덱스로 넘어감

 

PK 인덱스로 넘어오게 되면?

  • 항상 보조 인덱스들은 모두 PK 인덱스를 한번 거치게 됨
  • 보존 인덱스의 리프 노드들은 PK를 들고 있다.

2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.
728x90