orders 테이블

쿼리 패턴에서 인덱스를 역설계

인덱스는 임의로 추가하지 않습니다. 자주 쓰는 WHERE, 함께 붙는 ORDER BY / GROUP BY를 먼저 보고, 그 순서대로 선두 컬럼과 복합 인덱스를 정합니다.

주요 조회 패턴
인덱스가 먼저 잡아야 할 기준
선택 인덱스
특정 고객 주문 + 최근 주문
WHERE user_id = ? ORDER BY order_date DESC LIMIT 5

고객으로 먼저 좁히고, 같은 결과 집합 안에서 최근순 정렬까지 바로 처리해야 합니다.

선두: user_id 다음: order_date DESC

필터와 정렬이 한 경로에 있으면 쿼리 1과 3을 같은 복합 인덱스로 커버할 수 있습니다.

idx_orders_user_date
(user_id, order_date DESC) 쿼리 1, 3 커버

`user_id`만 보는 조회도 선두 컬럼 prefix 덕분에 그대로 활용됩니다.

기간별 주문 조회
WHERE order_date BETWEEN ? AND ?

날짜 범위를 연속해서 읽는 패턴입니다.

선두: order_date

범위 조건의 시작점과 끝점을 빠르게 잡을 수 있어야 합니다.

idx_orders_date
(order_date) 쿼리 2 커버

날짜 축으로 바로 범위 스캔하므로 기간 조회가 단순해집니다.

상태별 주문 수 집계
WHERE status = ? GROUP BY user_id

먼저 상태를 고르고, 그 안에서 사용자별로 묶는 패턴입니다.

선두: status 다음: user_id

필터 기준 뒤에 그룹 기준을 이어 두면 집계 대상 정리가 쉬워집니다.

idx_orders_status
(status, user_id) 쿼리 4 커버

같은 상태의 행을 모은 뒤 사용자 순서까지 이어서 볼 수 있습니다.

설계 순서
자주 실행되는 조회 조건을 먼저 고르고, 그 뒤에 붙는 정렬 / 그룹 기준을 이어서 인덱스를 만듭니다. 그래서 이 예시는 4개 쿼리를 3개 보조 인덱스로 정리합니다.