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

MySQL 복합 인덱스 완벽 가이드: 언제, 어떻게 사용해야 할까?

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)가 좋은 컬럼을 앞쪽에 배치하는 것이 성능 최적화의 핵심입니다.