개발로 자기계발
728x90

개념적

  1. 클러스터드 인덱스(Clustered Index): 라이브러리에서 책을 찾는 것을 생각해 보자.책들이 그들의 주요 키인 ISBN 번호 순서대로 정렬되어 있다고 가정한다. 이 경우, ISBN 번호가 클러스터드 인덱스와 같다. 특정 ISBN을 가진 책을 찾으려면, 책장을 탐색하여 정확한 위치를 찾는다. 이러한 방식으로 책은 ISBN 번호에 따라 물리적으로 정렬된다.
  2. 세컨더리 인덱스(Secondary Index): 이제 책의 제목으로 책을 찾으려고 한다고 상상해 보자. 이 경우, 책의 제목은 보조 인덱스와 같다. 책 제목에 따라 정렬된 카드 카탈로그(세컨더리 인덱스)를 통해 먼저 책의 ISBN을 찾는다. 그다음, 이 ISBN을 사용하여 책장에서 실제 책을 찾는다.
  3. 커버링 인덱스(Covering Index): 이제, 당신이 라이브러리에서 '고양이'에 관한 책들의 제목과 저자만 알고 싶다고 가정해 보자. 이 정보가 카드 카탈로그(인덱스)에 모두 있으면, 실제 책을 찾기 위해 책장을 찾아볼 필요가 없다. 이 경우, 카드 카탈로그는 모든 필요한 정보를 '커버'하므로, 이것을 커버링 인덱스라고 한다. 여기서는 실제 책(데이터)에 액세스 하지 않고도 필요한 정보를 모두 가져올 수 있다.

기술적

  1. 클러스터드 인덱스(Clustered Index): 이 인덱스는 행의 물리적인 순서를 기본 키의 순서와 일치시킨다. 이러한 방식은 주요 키에 따른 데이터의 물리적인 정렬을 나타낸다. InnoDB의 경우, 기본 키가 클러스터드 인덱스로 사용된다. 이 클러스터드 인덱스의 B+ 트리의 리프 노드에는 행의 실제 데이터가 모두 저장된다.
  2. 세컨더리 인덱스(Secondary Index): 이 인덱스는 특정 컬럼에 적용되는 추가적인 인덱스이다. 세컨더리 인덱스의 B+ 트리의 리프 노드에는 해당 컬럼의 값과 해당 행의 기본 키가 함께 저장된다. 이 기본 키는 해당 행의 실제 데이터를 찾기 위해 클러스터드 인덱스를 검색하는 데 사용된다. 세컨더리 인덱스를 사용해 데이터를 검색할 때는 두 단계를 거친다. 먼저, 세컨더리 인덱스의 B+ 트리를 따라 해당 키 값을 찾는다. 그런 다음, 찾은 기본 키로 클러스터드 인덱스의 B+ 트리를 검색해 실제 행 데이터를 찾는다. 이것을 종종 "인덱스 검색 후 주 키 검색"이라고 부른다고 한다.
  3. 커버링 인덱스(Covering Index): 이는 특정 쿼리의 모든 컬럼이 세컨더리 인덱스에 포함되어 있는 경우를 가리킨다. 이 경우, 쿼리는 세컨더리 인덱스만으로 데이터를 찾을 수 있으므로, 주 키로 클러스터드 인덱스를 검색할 필요가 없다. 이로 인해 성능 향상이 이루어진다.

클러스터드 인덱스 = Primary Key
세컨더리 인덱스 = 특정 컬럼에 생성한 인덱스
커버링 인덱스 = 세컨더리 인덱스만으로 데이터를 찾기 때문에 클러스터드 인덱스를 찾지 않고 커버가 가능한 인덱스

Flow 종류

  1. 클러스터드 인덱스로만 데이터를 찾는다.(Primary Key)
  2. 세컨더리 인덱스로 값을 찾은 이후에 클러스터드 인덱스로 데이터를 찾는다.(Index → Primary Key)
  3. 세컨더리 인덱스로만 데이터를 찾는다.(Index)
728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)