MySQL 공식 문서를 보면, 세가지 상황을 살펴볼 수 있다.
기본키를 정의했을 때
이때는 이노디비가 기보키를 클러스터링 키로 사용한다.
기본키는 없지만, 유니크 키가 있을 때
이노디비가 첫번째 유니크 키를 찾아서 해당 키를 클러스터링 인덱스로 사용한다.
둘다 없을때
이노디비는 내부적으로 숨겨진 클러스터링 인덱스를 만든다. 이 인덱스에는 6바이트 길이의 행 ID값이 포함된다(ROW_ID).
이노디비는 애초에 클러스터드 인덱스에 따라 데이터를 물리적으로 정렬을 하는 구조라, 이렇게 작동을 하는 것으로 보인다.
클러스터드 인덱스가 왜 조회 속도를 높여줘?
클러스터드 인덱스를 검색하면, 리프노드에 데이터를 담고 있기 때문에 빠르게 조회가 가능하다(세컨더리 인덱스는 리프노드에 클러스터드 인덱스 key값을 갖고 있다)
참고로, 프라이머리 키가 길면 세컨더리 인덱스가 더 많은 공간을 차지하게 되기 때문에, pk키를 짧게 하는 게 좋다.