정렬은 왼쪽부터 누적된다

복합 인덱스는 세 컬럼을 따로 저장하는 것이 아니라 하나의 정렬 순서로 묶어 둡니다.

먼저 user_id로 큰 묶음을 만들고, 같은 사용자 안에서 order_date가 정렬됩니다. 두 값까지 같을 때만 마지막으로 status가 순서를 가다듬습니다.

인덱스 정의

CREATE INDEX idx_orders
ON orders(user_id, order_date, status);
1차 user_id

같은 사용자 주문이 먼저 한 덩어리로 연속 배치됩니다.

2차 order_date

각 사용자 묶음 안에서 날짜 순서가 다시 잡힙니다.

3차 status

앞선 두 값이 같을 때만 마지막 정렬 기준으로 사용됩니다.

정렬 결과를 읽는 순서

하나의 인덱스 트랙
1차 user_id
2차 order_date
3차 status
1001 2024-01-01 PENDING
2024-01-15 DELIVERED
2024-02-01 SHIPPED
1002 2024-01-01 PENDING
2024-03-01 CANCELLED
1003 2024-02-15 DELIVERED

표를 왼쪽에서 오른쪽으로 읽으면, 복합 인덱스가 앞 컬럼으로 범위를 좁힌 뒤 그 안에서 다음 컬럼 순서를 활용한다는 구조가 보입니다.

핵심 이해

복합 인덱스의 순서는 독립적인 컬럼 목록이 아니라 정렬 우선순위입니다. 그래서 맨 앞 컬럼이 먼저 맞아야 뒤쪽 컬럼 정렬도 실제 검색에 의미를 가집니다.