[MySQL] Clustering Key

Roy·2024년 1월 19일
0

Real MySQL 8.0

목록 보기
2/8

MySQL의 Clustering Index는 InnoDB 스토리지 엔진만 지원하고, 다른 스토리지 엔진은 지원하지 않는다.
Clustring Index는 테이블의 Primary Key에 대해서 적용된다.
Primary Key의 값들이 비슷한 레코드끼리 묶어서 저장하는 것을 Clustering Index라고 한다.

Clustering Index의 핵심은 Primary Key의 값에 의해 레코드의 물리적 저장 위치가 결정된다는 것이다.
Primary Key의 값이 바뀌면 물리적 저장 위치가 바뀌게 된다.

이런 특성으로 인해, Clustering Index는 인덱스 알고리즘이 아니라 테이블 레코드의 저장 방식이라고 볼 수 있다.
그래서 Clustering Index와 Clustering Table은 같은 의미로 쓰인다.
또 Clustering Index의 기준이 되는 Primary Key는 Clustering Key라고 표현한다.

Clustering Index가 적용된 Table은 Primary Key 기반 검색이 매우 빠르지만, 레코드의 저장이나 Primary Key의 변경은 느리다.

InnoDB 엔진은 아래와 같은 순위로 Primary Key를 대체할 컬럼을 선택한다.

  1. Primary Key가 있으면, 그 키를 Clustering Key로 선택.
  2. NOT NULL 옵션의 Unique Index 중에서 첫번째 인덱스를 Clustering Key로 선택.
  3. 자동으로 유니크한 값을 가지도록 증가되는 컬럼을 내부적으로 추가한 후, Clustering Key로 선택.

InnoDB 엔진이 적절한 Clustering Key 후보를 찾지 못하면, 내부적으로 레코드의 일련번호 컬럼을 생성한다.
이 일련번호 컬럼은 사용자에게 노출되지 않고, 쿼리 문장에 명시적으로 사용할 수 없다.
Primary Key가 없는 테이블을 만든 경우도 마찬가지다.

그러므로 되도록 Primary Key를 지정하여 테이블을 만들어야 한다.

profile
Backend Engineer

0개의 댓글