Spring

[Spring] DB 조회에서 인덱스의 효과

montmer27 2026. 2. 26. 23:14

1. 인덱스의 개념과 특성

개념

  • 인덱스는 쿼리 성능을 높이는 도구이다.
  • 인덱스가 없이 특정 데이터를 조회하기 위해선 테이블 내 모든 데이터를 일일이 확인해야 한다. 이를 Full Table Scan이라고 한다.
  • 인덱스를 활용하면 색인표를 활용하기 때문에 매우 빠르게 조회할 수 있다. 이를 Index Scan이라고 한다.

제약

  • 색인표는 기존 테이블과 별도의 공간에서 관리되기 때문에, 추가 공간이 필요하다.
  • 트리 구조로 인해, Full Table Scan 방식 대비 insert와 update 과정에 시간이 많이 소요된다.

2. 인덱스의 작동 방식

  • 인덱스는 컬럼 단위로 생성된다.
  • 인덱스가 생성된 컬럼은 Index Scan이 가능하지만, 그렇지 않은 컬럼은 인덱스를 활용할 수 없다.

3. Index Scan의 종류

다양한 Index Scan 방식이 존재한다.

방식 특징
unique scan 하나만 찾는다. 가장 빠르다.
range scan 일정 범위/구간 내 데이터들을 연속적으로 가져온다. 
(full) index scan 전체 테이블 또는 인덱스를 스캔하며 원하는 데이터를 찾는다 -> 해결 필요
ICP(Index Condition Pushdown) WHERE 절의 조건 평가를 MySQL 서버 레벨이 아닌 스토리지 엔진 레벨에서 처리하는 최적화 기법이다. 이를 통해 서버로 불필요하게 전달되는 row 수를 줄여 I/O를 감소시킨다.

 

  • Optimizer와 Explain
    • 쿼리문에 따라서 효과적인 스캔 방식이 다른데, 이를 자동으로 결정해주는 기능이 있다. 이를 Optimizer라고 한다.
      • Optimizer가 어떤 스캔 방식을 선택할지 미리 예측하는 도구가 Explain 명령어이다.
      • Explain의 결과로 표가 출력되는데, 그중 type 컬럼에 해당하는 부분이 index scan 방식이다.
방식 type 컬럼에서의 표시
unique scan const
range scan range
index scan index 또는 all
ICP(Index Condition Pushdown) Extra 컬럼에 Using index condition이 표시되는 것으로 확인한다.

 

4. 인덱스의 저장과 관리

  • 인덱스는 B-tree라는 별도의 자료 구조로 저장된다.
  • 이 자료 구조의 특성상 데이터의 삽입과 수정이 Full Table Scan 방식 대비 오래 걸린다.
  • B-tree는 중간 값을 기준으로 왼쪽에 작은 값, 오른쪽에 큰 값을 브랜치 구조로 연결한 자료 구조다.
  • 데이터가 추가될 때마다 전체 트리 구조가 바뀌기 때문에 데이터의 추가와 수정이 오래 걸린다.
    • B-tree의 재구성은 어떤 프레임워크를 사용하든 관계없이 DB 엔진이 자체적으로 자동 처리한다.