인덱스는 MySQL이 전체 테이블을 스캔하지 않고도 행을 찾을 수 있게 해주는 별도의 정렬된 데이터 구조(InnoDB에서는 B-tree)입니다. 인덱스가 없으면 조회는 모든 행을 읽지만(풀 테이블 스캔), 인덱스가 있으면 몇 단계 만에 트리를 탐색합니다.
기본 키 vs 보조 인덱스
InnoDB에서 테이블 자체가 곧 기본 키 인덱스입니다 — 바로 *클러스터형 인덱스(clustered index)*입니다. 행은 기본 키 순서로 물리적으로 저장되므로, 기본 키 조회는 곧바로 전체 행에 도달합니다.
보조 인덱스는 다른 컬럼을 키로 하는 별도의 B-tree입니다. 리프 노드는 인덱싱된 값과 기본 키를 저장하므로, 보조 인덱스를 사용하면 나머지 행 데이터를 가져오기 위해 두 번째 조회("클러스터형 인덱스로 되돌아가기")가 드는 경우가 많습니다.
