MySQL 복합 인덱스란 무엇인가?
복합 인덱스(Composite Index)는 두 개 이상의 컬럼을 하나의 인덱스로 묶어 생성하는 기법입니다. 여러 조건으로 데이터를 조회하거나 테이블을 조인할 때 쿼리 성능을 크게 향상시킬 수 있어, 대용량 데이터를 다루는 환경에서 특히 유용합니다.
복합 인덱스는 서브쿼리(Sub Query)를 사용하는 상황에서도 활용할 수 있으며, 다음과 같은 경우에 그 효과가 두드러집니다.
- 조인(Joining) — 여러 테이블을 연결할 때 조인 조건 컬럼에 인덱스가 있으면 조회 속도가 빨라집니다.
- 필터링(Filtering) — WHERE 절에서 여러 컬럼을 동시에 조건으로 걸 때 효율적으로 작동합니다.
- 선택(Selecting) — 인덱스에 포함된 컬럼만 조회하면 테이블 접근 없이 인덱스만으로 결과를 반환할 수 있습니다(커버링 인덱스).
복합 인덱스 생성 문법
복합 인덱스는 아래와 같은 형식으로 정의합니다. 컬럼은 필요한 만큼 나열할 수 있습니다.
index(column_name1, column_name2, column_name3, ..., column_nameN)
복합 인덱스 실습 예제
먼저 인덱스를 포함한 테이블을 생성해 보겠습니다. 아래 예제에서는 id, LastName, Address 세 개의 컬럼으로 복합 인덱스를 구성했습니다.
mysql> create table MultipleIndexDemo
-> (
-> id int,
-> FirstName varchar(100),
-> LastName varchar(100),
-> Address varchar(200),
-> index(id, LastName, Address)
-> );
Query OK, 0 rows affected (0.57 sec)
인덱스 생성 확인하기
인덱스가 제대로 생성되었는지 확인하려면 SHOW INDEX 명령어를 사용합니다.
mysql> show index from MultipleIndexDemo;
실행 결과는 다음과 같습니다. 하나의 인덱스(Key_name: id) 안에 세 개의 컬럼이 순서대로(Seq_in_index 1, 2, 3) 등록된 것을 확인할 수 있습니다.
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | multipleindexdemo | 1 | id | 1 | id | A | 0 | NULL | NULL | YES | BTREE | | | YES | | multipleindexdemo | 1 | id | 2 | LastName | A | 0 | NULL | NULL | YES | BTREE | | | YES | | multipleindexdemo | 1 | id | 3 | Address | A | 0 | NULL | NULL | YES | BTREE | | | YES | +-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ 3 rows in set (0.18 sec)
복합 인덱스 사용 시 주의사항
복합 인덱스는 좌측 접두사(Leftmost Prefix) 원칙을 따릅니다. 즉, 인덱스의 첫 번째 컬럼이 쿼리 조건에 포함되어야 인덱스가 활성화됩니다. 위 예제의 경우 WHERE LastName = ...처럼 첫 번째 컬럼인 id 없이 두 번째 컬럼만으로 조회하면 인덱스 효율이 크게 떨어질 수 있습니다.
따라서 복합 인덱스를 설계할 때는 조회 빈도가 높고 선택도(selectivity)가 좋은 컬럼을 앞쪽에 배치하는 것이 성능 최적화의 핵심입니다.