인덱스 동작 원리
MySQL InnoDB는 B+Tree 구조의 인덱스를 사용합니다. 리프 노드에는 실제 데이터(클러스터 인덱스) 또는 PK 값(세컨더리 인덱스)이 저장됩니다. 인덱스가 없으면 Full Table Scan이 발생합니다.
복합 인덱스 설계 원칙
복합 인덱스는 카디널리티가 높은 컬럼을 앞에 배치합니다. WHERE 조건의 등치(=) 컬럼 → 범위(<, >, BETWEEN) 컬럼 순서로 구성하는 것이 일반적입니다. 범위 컬럼 뒤의 컬럼은 인덱스 활용이 제한됩니다.
EXPLAIN으로 인덱스 확인
EXPLAIN 결과에서 type 컬럼이 ALL이면 Full Table Scan입니다. ref 또는 range면 인덱스가 활용되고 있습니다. rows 수치가 낮을수록 효율적인 쿼리입니다.
인덱스 주의사항
인덱스는 쓰기 성능을 저하시킵니다. 컬럼에 함수를 적용하거나(WHERE YEAR(created_at) = 2026), 타입 불일치가 있으면 인덱스를 타지 않습니다. Covering Index를 활용하면 테이블 접근 없이 인덱스만으로 결과를 반환할 수 있습니다.