복합 인덱스 순서

먼저 = 조건으로 좁히고, 그다음 범위정렬을 잇습니다.

복합 인덱스는 앞쪽 컬럼부터 차례대로 활용됩니다. 그래서 등호 조건이 선두에 오면 검색 범위를 가장 작게 만든 뒤, 다음 컬럼의 범위 조건과 정렬까지 이어서 쓰기 쉬워집니다.

WHERE user_id = ? AND order_date BETWEEN ? AND ? ORDER BY status

좋은 순서

범위를 먼저 좁힘
(user_id, order_date, status)
1단계

user_id = ?로 대상 묶음을 먼저 고정

같은 사용자 주문만 남겨 다음 컬럼 조건을 더 작게 적용합니다.

2단계

그 안에서 order_date 범위를 스캔

범위 조건이 실제로 의미 있는 좁은 구간에서 동작합니다.

결과

정렬 컬럼 status도 뒤에서 자연스럽게 보조

선두 조건이 강할수록 인덱스 활용 폭이 넓어집니다.

나쁜 순서

선두에서 막힘
(order_date, user_id, status)
1단계

order_date 범위부터 넓게 잡고 시작

아직 사용자 구분이 안 되어 많은 레코드를 먼저 훑습니다.

2단계

user_id = ?는 뒤늦게 확인

등호 조건이 선두가 아니라 인덱스 범위 축소 효과가 약해집니다.

결과

정렬 이전에 이미 스캔 비용이 커짐

같은 조건이어도 불필요한 탐색이 늘어나기 쉽습니다.

기억할 순서

= 조건 → 범위 조건 → ORDER BY → 커버링용 컬럼 순으로 두면, 복합 인덱스가 앞에서부터 자연스럽게 이어져 더 적은 범위를 읽고 정렬까지 돕기 쉽습니다.