데이터베이스 인덱스(Index)란?

데이터베이스에서 데이터를 빠르게 검색할 수 있도록 지원하는 자료구조로, 테이블의 데이터 검색 성능을 향상시키는 역할을 한다.

인덱스는 주로 B-tree 자료구조를 이용해 데이터를 정렬된 형태로 저장하며, 검색 성능 향상에는 큰 도움을 주지만 삽입, 수정, 삭제 시에는 추가적인 부하가 발생할 수 있다.


📌 인덱스의 종류

인덱스는 주로 단일 인덱스복합 인덱스로 나뉜다.

🎯 단일 인덱스 (Single Column Index)

  • 하나의 컬럼에만 설정된 인덱스
  • 특정 컬럼으로 자주 조회할 때 유용
CREATE INDEX idx_username ON users(username);

예시 쿼리 및 인덱스 활용

-- 사용자 이름으로 조회하는 경우
SELECT * FROM users WHERE username = 'john_doe';

위와 같이 특정 컬럼으로 자주 조회하면 단일 인덱스를 설정하는 것이 좋다.

🎯 복합 인덱스 (Composite Index)

  • 여러 컬럼을 묶어서 설정하는 인덱스
  • 여러 컬럼으로 조건 검색 시 유리
CREATE INDEX idx_user_fullname ON users(lastname, firstname);

예시 쿼리 및 인덱스 활용

-- 성과 이름을 모두 조건으로 검색하는 경우
SELECT * FROM users WHERE lastname = 'Kim' AND firstname = 'Jisoo';

복합 인덱스 설정 시 컬럼 순서는 WHERE 절의 조건에서 가장 자주 사용되는 컬럼부터 지정해야 효과적이다.


📌 단일 인덱스와 복합 인덱스의 차이

구분 단일 인덱스 복합 인덱스
정의 하나의 컬럼에만 생성 두 개 이상의 컬럼에 동시에 생성
사용 상황 특정 컬럼으로만 자주 조회 여러 컬럼 조건을 동시에 자주 조회
성능 단일 컬럼 조회에 최적화 다중 컬럼 조회 조건에 최적화
주의사항 과도한 사용 시 역효과 가능 컬럼의 순서가 매우 중요

📌 인덱스 설계 시 고려사항

  • 자주 검색되는 컬럼에만 인덱스를 생성
  • **중복이 적고 카디널리티(Cardinality)가 높은 컬럼에 인덱스 생성**
  • 데이터의 삽입, 수정, 삭제가 빈번할 경우 인덱스 수 최소화
  • 복합 인덱스의 컬럼 순서를 신중히 결정 (검색 우선순위가 높은 컬럼부터)

📌 쿼리 성능 분석 및 인덱스 활용

  • 자주 실행되는 쿼리 분석 후, WHERE 조건에 맞는 인덱스 설계
  • EXPLAIN 명령을 사용해 쿼리가 인덱스를 효율적으로 사용하는지 확인 가능
EXPLAIN SELECT * FROM users WHERE lastname = 'Kim';

이 결과를 통해 Full Table Scan 여부 및 인덱스 활용 여부를 쉽게 파악할 수 있다.


📌 장점과 단점

✅ 장점

  • 데이터 조회 속도 대폭 향상
  • 정렬 및 범위 검색 성능 개선

❌ 단점

  • 데이터 변경 시 성능 저하 발생
  • 과도한 인덱스는 저장 공간 증가 및 유지보수 비용 상승

📌 연결 문서

댓글남기기