복합 인덱스 설계

앞 컬럼은 검색 시작점을 잡고, 뒤 컬럼은 실제 쿼리 패턴과 정렬까지 완성합니다.

복합 인덱스는 왼쪽부터 읽히므로, 처음 오는 컬럼이 탐색 범위를 얼마나 빨리 줄이는지가 핵심입니다. 그다음 순서는 자주 함께 쓰는 조건과 정렬 요구를 맞춰서 추가 작업을 줄입니다.

읽는 기준
왼쪽 컬럼은 “어디서 찾기 시작할지”, 오른쪽 컬럼은 “얼마나 덜 정렬하고 덜 다시 읽을지”를 결정합니다.

문법 순서가 아니라 검색 범위 축소, 실사용 조합, 정렬 일치를 함께 봐야 합니다.

앞쪽에 두면 좋은 컬럼

검색 범위를 먼저 고정하거나 빠르게 좁히는 컬럼이 우선입니다.

등가 조건(=) 컬럼을 먼저 탐색 시작점
WHERE status = 'active' AND created_at > '2024-01' → (status, created_at)

등가 조건으로 먼저 묶어 두면, 뒤의 범위 조건은 이미 좁아진 구간에서만 스캔합니다.

선택도가 높은 컬럼을 우선 검토 범위 축소
(user_id, status) > (status, user_id)

일반적으로 더 적은 행을 남기는 컬럼이 앞에 오면, 같은 인덱스여도 훨씬 빨리 후보를 줄일 수 있습니다.

뒤쪽 순서는 워크로드에 맞춘다

앞 컬럼만 맞추면 끝이 아닙니다. 실제로 같이 쓰는 조건과 정렬까지 이어서 확인합니다.

자주 함께 쓰는 WHERE 조합 반영 쿼리 패턴
WHERE user_id = 1 AND status = 'completed'

단일 컬럼 최적화보다, 실제로 자주 같이 오는 조건 묶음을 한 번에 처리하는 쪽이 더 실용적입니다.

ORDER BY / GROUP BY 순서까지 맞추기 정렬 비용 감소
인덱스 순서 = 정렬 순서 → 추가 sort 작업 감소

필터링 뒤에 정렬이나 그룹화가 이어진다면, 같은 순서를 유지한 인덱스가 메모리 정렬 비용을 덜어줍니다.