복합 인덱스(Composite Index)는 두 개 이상의 여러 컬럼에 걸쳐 생성되는 인덱스를 의미합니다. 다중 컬럼 인덱스(Multiple-column Index)라고도 불리며, 하나의 인덱스로 여러 컬럼을 동시에 커버할 수 있어 검색 성능 최적화에 매우 유용합니다.
복합 인덱스의 주요 특징
복합 인덱스가 가진 핵심 특징은 다음과 같습니다.
- MySQL에서는 사용자가 최대 16개 컬럼까지 포함하는 복합 인덱스를 생성할 수 있습니다.
- 쿼리 옵티마이저(Query Optimizer)는 인덱스에 포함된 모든 컬럼을 조건으로 사용하는 쿼리에 대해 복합 인덱스를 활용합니다.
- 뿐만 아니라 첫 번째 컬럼만, 또는 첫 번째와 두 번째 컬럼처럼 인덱스 컬럼의 선행 부분만 사용하는 쿼리에도 적용할 수 있습니다.
- 인덱스 정의 시 컬럼 순서를 올바르게 지정하면, 단 하나의 복합 인덱스만으로도 같은 테이블에 대한 다양한 종류의 쿼리 속도를 높일 수 있습니다.
이러한 동작 방식은 '최 좌측 접두사(Leftmost Prefix) 원칙'이라고 불리며, 복합 인덱스 설계 시 반드시 고려해야 할 중요한 개념입니다.
복합 인덱스 생성 방법
1. 테이블 생성 시 인덱스 추가
테이블을 새로 만들 때 아래와 같은 문법을 사용하여 복합 인덱스를 함께 정의할 수 있습니다.
CREATE TABLE table_name ( c1 data_type PRIMARY KEY, c2 data_type, c3 data_type, c4 data_type, INDEX index_name (c2, c3, c4) );
위 예제에서 복합 인덱스는 c2, c3, c4 세 개의 컬럼으로 구성됩니다.
2. 기존 테이블에 인덱스 추가
이미 존재하는 테이블에는 CREATE INDEX 문을 사용하여 복합 인덱스를 추가할 수 있습니다.
CREATE INDEX index_name ON table_name(c2, c3, c4);
복합 인덱스의 검색 범위
예를 들어 (c1, c2, c3) 순서로 복합 인덱스가 생성되어 있다면, 해당 인덱스는 아래와 같은 컬럼 조합의 검색에 활용될 수 있습니다.
(c1) (c1, c2) (c1, c2, c3)
즉, 인덱스의 첫 번째 컬럼(c1)부터 연속적으로 포함되는 조합만 인덱스를 탈 수 있으며, (c2)나 (c3, c1)처럼 선행 컬럼이 빠지거나 순서가 어긋난 조건에서는 인덱스 효율이 크게 떨어집니다. 따라서 실무에서는 WHERE 절에서 자주 함께 조회되는 컬럼들을 기준으로, 선택도(Selectivity)가 높은 컬럼을 앞쪽에 배치하는 것이 좋은 설계 전략입니다.