WHERE name = 'Kim'

세컨더리 인덱스는 행 대신 PK를 넘기고, 실제 행은 한 번 더 찾습니다

InnoDB의 비클러스터드 인덱스 리프에는 전체 행이 아니라 기본 키가 저장됩니다. 그래서 조건을 만족하는 엔트리를 찾은 뒤에도 클러스터드 인덱스를 다시 따라가야 합니다.

1단계

세컨더리 인덱스에서 `Kim`을 찾습니다

[Kim]
[Choi, Hong]
[Kim, Lee, Park]
Choi PK=20
Hong PK=40
Kim PK=10

이 인덱스는 `name` 순서로 빠르게 찾지만, 아직 전체 행 데이터는 갖고 있지 않습니다.

핵심 handoff

리프 노드가 돌려주는 값은 행이 아니라 PK입니다

secondary leaf result
PK = 10
다음 탐색의 입력값

비클러스터드 인덱스의 리프는 “여기 행이 있다”가 아니라 “이 PK로 다시 가라”는 참조를 남깁니다.

2단계

클러스터드 인덱스를 PK=10으로 재탐색해 전체 행을 읽습니다

클러스터드 인덱스 리프
[10, "Kim", "Seoul", "kim@example.com"]
최종 반환
SELECT * 결과 전체 행

이 추가 재탐색 때문에 비클러스터드 인덱스 조회는 북마크 룩업 또는 테이블 액세스 단계를 동반합니다.

핵심: InnoDB 비클러스터드 인덱스는 `보조 키 → PK → 실제 행` 순서로 읽습니다. 즉, 조건 검색은 빠르지만 전체 컬럼이 필요하면 PK를 통한 추가 접근 비용이 붙습니다.