복합 인덱스는 앞쪽 컬럼부터 차례대로 활용됩니다. 그래서 등호 조건이 선두에 오면 검색 범위를 가장 작게 만든 뒤, 다음 컬럼의 범위 조건과 정렬까지 이어서 쓰기 쉬워집니다.
user_id = ?로 대상 묶음을 먼저 고정
같은 사용자 주문만 남겨 다음 컬럼 조건을 더 작게 적용합니다.
그 안에서 order_date 범위를 스캔
범위 조건이 실제로 의미 있는 좁은 구간에서 동작합니다.
정렬 컬럼 status도 뒤에서 자연스럽게 보조
선두 조건이 강할수록 인덱스 활용 폭이 넓어집니다.
order_date 범위부터 넓게 잡고 시작
아직 사용자 구분이 안 되어 많은 레코드를 먼저 훑습니다.
user_id = ?는 뒤늦게 확인
등호 조건이 선두가 아니라 인덱스 범위 축소 효과가 약해집니다.
정렬 이전에 이미 스캔 비용이 커짐
같은 조건이어도 불필요한 탐색이 늘어나기 쉽습니다.
= 조건 → 범위 조건 → ORDER BY → 커버링용 컬럼 순으로 두면, 복합 인덱스가 앞에서부터 자연스럽게 이어져 더 적은 범위를 읽고 정렬까지 돕기 쉽습니다.