복합 인덱스
2026. 3. 31. 21:23

복합 인덱스란?

두 컬럼(start_date, end_date)을 묶어서 하나의 인덱스로 만드는 것을 복합 인덱스라고 한다.

복합 인덱스가 아닌 단일 인덱스만 있으면 다중 조건 조회에서 인덱스 활용이 제한되어 성능이 떨어지게 된다.

 

복합 인덱스는 왼쪽(첫 번째 컬럼)부터 순서대로만 작동하는데 

이를 왼쪽 접두어 규칙(Leftmost Prefix Rule)이라고 한다.

 

CREATE INDEX idx_start_end ON events(start_date, end_date);

이 인덱스는 내부적으로 이렇게 정렬된다 👇

(start_date, end_date)
(2025-01-01, 2025-01-05)
(2025-01-01, 2025-01-10)
(2025-02-01, 2025-02-05)
(2025-02-01, 2025-02-10)

start_date로 먼저 정렬하고 같은 날짜 안에서는 end_date순으로 정렬한다.

 

복합 인덱스 적용 규칙

WHERE 조건 적용 여부 설명
WHERE start_date 첫 번째 컬럼부터 사용
WHERE start_date, end_date 선두 컬럼(start_date)을 포함하므로 사용 가능
WHERE start_date, end_date, any_date 인덱스 정의 순서대로 모두 포함
WHERE end_date, any_date, start_date 쿼리 조건에 start_date가 포함되어 있으면 순서가 달라도 옵티마이저가 인덱스 활용 가능
WHERE end_date, any_date 선두 컬럼(start_date)이 조건에 없으므로 인덱스 사용 불가
WHERE start_date, any_date start_date까지는 사용 가능하지만 중간 컬럼(end_date) 없이
any_date까지는 활용 불가

 

복합 인덱스가 유용한 케이스

분야 / 상황 예시 쿼리 인덱스 예시 효과
쇼핑몰 상품 목록 WHERE category_id=? ORDER BY price (category_id, price) 정렬 생략, 페이징 쿼리 빠름
게시판 / 블로그 WHERE board_id=? ORDER BY created_at DESC (board_id, created_at) 최신글 빠르게 조회
주문 / 결제 내역 WHERE customer_id=? AND order_date BETWEEN ... (customer_id, order_date) 고객별 기간 검색 최적화
지역 기반 서비스 WHERE region=? AND district=? (region, district) 다중 지역 필터 효율 ↑
통계 / 리포트 WHERE date BETWEEN ... GROUP BY category, region (date, category, region) 그룹화·정렬 비용 절감

'💻 Backend > 이론 및 실습' 카테고리의 다른 글

캐싱 개념 및 필요성  (0) 2026.04.01
Index  (0) 2026.03.31
QueryDSL 검색 기능 구현  (0) 2026.03.30
QueryDSL 개념 및 적용  (0) 2026.03.30
VPC EC2 생성  (0) 2026.03.10