📘 3-1. MySQL 인덱스 기본 개념 및 활용
MySQL에서 인덱스는 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다. 인덱스는 데이터를 빠르게 검색할 수 있도록 돕는 데이터 구조로, 일반적으로 검색, 정렬, 그룹화 등의 작업을 빠르게 수행할 수 있게 합니다. 이번 포스팅에서는 MySQL 인덱스의 기본 개념과 활용 방법을 자세히 알아보겠습니다.
📌 인덱스란?
인덱스는 책의 목차처럼, 데이터베이스 테이블의 데이터를 빠르게 찾을 수 있도록 도와주는 자료구조입니다. 인덱스는 주로 B-Tree 또는 Hash 기반으로 구현되며, 테이블의 특정 열에 대해 빠른 검색을 가능하게 합니다.
📌 인덱스의 역할
- 검색 속도 향상: WHERE 절에서 조건을 만족하는 행을 빠르게 찾을 수 있도록 도와줍니다.
- 정렬 속도 향상: ORDER BY 또는 GROUP BY를 사용할 때, 인덱스가 있으면 성능이 크게 개선됩니다.
- 중복 데이터 제거: 유니크 인덱스를 사용하면 중복 데이터를 방지할 수 있습니다.
- 조인 성능 향상: 여러 테이블을 조인할 때, 인덱스를 활용하면 성능을 크게 향상시킬 수 있습니다.
📌 인덱스의 종류
MySQL에서는 다양한 종류의 인덱스를 제공하며, 각 인덱스는 특정 상황에서 성능을 최적화하는 데 사용됩니다.
- 기본 인덱스 (Index): 가장 기본적인 인덱스로,
PRIMARY KEY
나UNIQUE
제약이 없는 열에 사용됩니다. - 유니크 인덱스 (UNIQUE Index): 중복된 값이 들어가는 것을 방지하는 인덱스입니다.
PRIMARY KEY
는 유니크 인덱스를 자동으로 생성합니다. - 복합 인덱스 (Composite Index): 여러 열을 결합한 인덱스로, 복수의 열을 대상으로 검색할 때 성능을 향상시킵니다.
- 풀텍스트 인덱스 (FULLTEXT Index): 텍스트 기반의 검색을 최적화하는 인덱스로,
TEXT
나VARCHAR
와 같은 텍스트 컬럼에 대해 검색 성능을 높입니다. - 비트맵 인덱스 (Bitmap Index): 데이터가 적고, 열 값이 적을 때 유용합니다. 주로 읽기 전용 시스템에서 사용됩니다.
📌 인덱스 생성 및 활용
인덱스는 데이터베이스 테이블에서 중요한 역할을 하지만, 너무 많은 인덱스를 생성하면 INSERT, UPDATE, DELETE 작업에 성능 저하를 일으킬 수 있습니다. 따라서 적절하게 인덱스를 설계하는 것이 중요합니다.
✅ 인덱스 생성
인덱스를 생성하는 기본 문법은 다음과 같습니다:
CREATE INDEX index_name ON table_name (column_name);
예를 들어, users
테이블에서 email
열에 인덱스를 생성하려면:
CREATE INDEX idx_email ON users (email);
✅ 복합 인덱스 생성
복합 인덱스는 여러 열을 결합하여 인덱스를 생성할 수 있습니다. 예를 들어, first_name
과 last_name
두 열에 대해 검색 성능을 향상시키려면:
CREATE INDEX idx_name ON users (first_name, last_name);
✅ 유니크 인덱스 생성
유니크 인덱스는 중복 값을 방지하기 위해 사용됩니다. 예를 들어, users
테이블의 email
열에 대해 유니크 인덱스를 생성하려면:
CREATE UNIQUE INDEX idx_unique_email ON users (email);
📌 인덱스의 성능 영향
인덱스는 데이터 검색 속도를 향상시키지만, 인덱스를 만들거나 갱신하는 데 드는 비용이 발생합니다. 특히 다음과 같은 작업에서는 성능 저하를 초래할 수 있습니다:
- INSERT, UPDATE, DELETE: 데이터를 삽입하거나 수정할 때마다 인덱스를 갱신해야 하므로, 이러한 작업에서 성능이 저하될 수 있습니다.
- 불필요한 인덱스: 사용되지 않는 인덱스가 많으면, 쿼리 최적화가 어려워지고 성능이 떨어질 수 있습니다.
따라서 인덱스는 필요할 때만 적절히 사용해야 합니다.
📌 인덱스 활용 예시
✅ 단일 인덱스 활용 예시
사용자의 email
로 데이터를 빠르게 조회하려면:
SELECT * FROM users WHERE email = 'test@example.com';
위와 같은 쿼리에서는 email
열에 인덱스가 있으면 성능이 크게 향상됩니다.
✅ 복합 인덱스 활용 예시
여러 조건을 동시에 사용할 때 복합 인덱스를 활용하여 성능을 최적화할 수 있습니다. 예를 들어:
SELECT * FROM orders WHERE status = 'completed' AND user_id = 123;
위 쿼리에서 status
와 user_id
두 열에 복합 인덱스를 생성하면 성능이 개선됩니다.
💡 실무 팁
- 테이블에 인덱스를 생성할 때는 자주 사용되는 검색 조건이나 조인에 사용되는 열에 인덱스를 적용하는 것이 좋습니다.
- 복합 인덱스는 쿼리에서 자주 사용되는 조건의 순서대로 생성해야 성능을 최적화할 수 있습니다.
- 인덱스의 갯수가 많을수록 디스크 사용량이 증가하고, 인덱스를 갱신하는 데 시간이 걸리므로, 최소한으로 사용하는 것이 좋습니다.
📚 다음 글 예고
다음 포스팅에서는 3-2. 쿼리 성능 분석 및 실행 계획 (EXPLAIN)을 다루어, 쿼리 성능을 분석하고 병목을 찾는 방법을 자세히 설명합니다. 쿼리 최적화를 위한 필수 기술이니 많은 기대 부탁드립니다!
'DB 데이터 > 인덱스 & 성능 최적화' 카테고리의 다른 글
데이터베이스 파티셔닝 활용법 (0) | 2025.05.15 |
---|---|
쿼리 캐시 활용법 (1) | 2025.05.14 |
다양한 인덱스 종류와 최적화 (0) | 2025.05.13 |
쿼리 성능 분석 및 실행 계획 (EXPLAIN) (0) | 2025.05.12 |