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 방식이다.
- 쿼리문에 따라서 효과적인 스캔 방식이 다른데, 이를 자동으로 결정해주는 기능이 있다. 이를 Optimizer라고 한다.
| 방식 | 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 엔진이 자체적으로 자동 처리한다.
'Spring' 카테고리의 다른 글
| [Test] 부하 테스트(Load Test)란? (0) | 2026.04.01 |
|---|---|
| [Spring] The importance of index in DB queries (0) | 2026.02.26 |
| [Spring AI] LLM, call(), stream(), 모델의 확률성 (0) | 2026.02.26 |
| [Spring] Redis as a cache memory (0) | 2026.02.26 |
| [Spring] Java와 Redis를 연결해주는 RedisTemplate (0) | 2026.02.26 |