Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 복합 인덱스(Composite Index) 개념과 생성 방법 완벽 정리

복합 인덱스(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)가 높은 컬럼을 앞쪽에 배치하는 것이 좋은 설계 전략입니다.