인덱스/객체고급

COMPOSITE INDEX (복합 인덱스)

여러 컬럼을 묶어 만든 인덱스. 컬럼 순서가 핵심

정의

두 개 이상의 컬럼을 결합하여 만든 인덱스. CREATE INDEX idx ON t(a, b, c)에서 컬럼 순서 (a, b, c)가 효율을 결정한다. 선두 컬럼(a)이 WHERE 조건에 없으면 인덱스 스캔이 비효율적이거나 불가능하다. 등치 조건(=)이 먼저, 범위 조건(>, BETWEEN)이 나중이 되도록 순서를 잡는 것이 일반 원칙이다.

왜 중요한가?

단일 인덱스 여러 개보다 복합 인덱스 하나가 훨씬 효율적인 경우가 많다. 그러나 선두 컬럼 규칙을 모르면 만들어두고도 인덱스를 못 탄다. 자주 함께 검색되는 컬럼 조합을 분석해 설계해야 한다.

틀리기 쉬운 포인트

  • !선두 컬럼이 WHERE 조건에 없으면 인덱스 효율이 떨어집니다.
  • !범위 조건(>, BETWEEN) 컬럼 이후의 인덱스 컬럼은 정렬 효과가 사라집니다.
  • != 조건 컬럼을 앞에, 범위/정렬 컬럼을 뒤에 배치하는 것이 일반 원칙입니다.

예시

  CREATE INDEX idx_ord
ON orders(customer_id, order_date);
SELECT *
FROM orders
WHERE customer_id = 100 AND order_date >= DATE '2025-01-01';

성능 포인트

!범위 조건 컬럼 이후의 인덱스 컬럼은 정렬 효과가 사라진다. = 조건 컬럼을 앞에, 범위/정렬 컬럼을 뒤에 배치하라.

관련 개념

관련 문제 풀어보기

관련 카테고리