SQL

[DB Optimization#3] 인덱스(Index)란?

j.d 2025. 4. 16. 23:07

DB 성능을 높이기 위한 가장 대표적인 방법 중 하나는 인덱스(index) 를 활용하는 것입니다.
많은 튜닝 기법이 존재하지만, 인덱스는 그 중에서도 기본이자 핵심입니다.
이번 글에서는 인덱스가 무엇인지, 왜 필요한지, 어떻게 작동하는지를 예시를 통해 알아보겠습니다.

 

 

 

인덱스(Index)란?

데이터베이스에서 인덱스는 검색 속도를 향상시키기 위한 자료 구조입니다.
이는 데이터를 보다 빠르게 조회할 수 있도록 설계된 메커니즘입니다.

 

조금 더 직관적으로 말하자면, 인덱스는 특정 컬럼을 기준으로 데이터를 미리 정리해 둔 ‘찾기 쉬운 목록’이라고 이해하면 됩니다.
마치 책의 목차처럼, 원하는 정보를 빠르게 찾아갈 수 있도록 돕는 역할을 합니다.

 

 

예를 들어 아래와 같은 users 테이블이 있다고 가정해봅시다.

id name score
1 User1 87
2 User2 75
3 User3 92

 

이 테이블에 100만 건의 데이터가 있고, score = 87인 사용자를 찾고 싶다고 가정해봅시다.

SELECT * 
FROM users 
WHERE score = 87;

 

속도를 측정해보면 0.272초정도 걸리는 것을 볼 수 있습니다.

하지만 score 값이 정렬되어 있지 않다면 MySQL은 전 행을 순차적으로 스캔하며 조건에 맞는 행을 찾아야 합니다.
→ 이런 방식은 데이터가 많을수록 비효율적입니다.  (풀 테이블 스캔 발생)

 

 

인덱스 생성

이를 위해서 score 컬럼에 인덱스를 걸어두면, SQL은 정렬된 인덱스를 통해 필요한 값의 위치만 빠르게 조회할 수 있습니다.
→ 검색 범위를 대폭 줄일 수 있어 쿼리 성능이 향상됩니다.

CREATE INDEX idx_score ON users(score);

→ 이번엔 idx_score 인덱스를 활용해 빠른 탐색이 가능해집니다.

 

인덱스 적용 후 동일한 쿼리를 실행시켜보면 아래와 같이 0.070초로 앞선 데이터에 비해 0.2초 빨라진 것을 확인할 수 있습니다.

'SQL' 카테고리의 다른 글

[DB Optimization#5] UNIQUE  (0) 2025.04.17
[DB Optimization#4] Primary Key  (0) 2025.04.17
[DB Optimization#2] MySQL 구조  (0) 2025.04.16
[DB Optimization#1] DB 성능 최적화란?  (0) 2025.04.16
[SQL#12] UNION / UNION ALL  (0) 2025.04.16