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를 대체할 컬럼을 선택한다.
InnoDB 엔진이 적절한 Clustering Key 후보를 찾지 못하면, 내부적으로 레코드의 일련번호 컬럼을 생성한다.
이 일련번호 컬럼은 사용자에게 노출되지 않고, 쿼리 문장에 명시적으로 사용할 수 없다.
Primary Key가 없는 테이블을 만든 경우도 마찬가지다.
그러므로 되도록 Primary Key를 지정하여 테이블을 만들어야 한다.