2025-12-15
오늘 배운 것
Table Full Scan vs Index Range Scan
1. Table Full Scan (전체 테이블 탐색)
개념
- 인덱스를 사용하지 않고 테이블의 모든 row를 처음부터 끝까지 읽는 방식
- 다음과 같은 경우에 발생
- 인덱스가 존재하지 않는 경우
- WHERE 조건이 인덱스를 사용할 수 없는 형태인 경우
- 조회 대상 row가 너무 많아 인덱스를 사용하는 것보다 Full Scan이 더 빠르다고 옵티마이저가 판단한 경우
발생 조건
- WHERE 조건에 인덱스가 없는 컬럼을 사용하는 경우
- LIKE ‘%값’ 처럼 앞에 와일드카드가 붙은 경우
- 테이블의 대부분 row를 조회하는 쿼리
단점
- 데이터가 많을수록 성능 저하가 심함
- 디스크 I/O가 많이 발생
- 전체 row를 메모리에 적재하므로 메모리 사용량 증가
2. Index Range Scan (인덱스 범위 탐색)
개념
- 인덱스를 사용하여 특정 범위에 해당하는 row만 탐색하는 방식
- B+Tree 구조를 기반으로 필요한 인덱스 리프 노드만 접근
예시
SELECT *
FROM user
WHERE age BETWEEN 20 AND 29;
- age 컬럼에 인덱스가 존재한다면 Index Range Scan 사용
장점
- 필요한 row만 조회하므로 성능이 빠름
- 인덱스가 정렬된 구조이기 때문에 ORDER BY 최적화에 유리
- 범위 조건(BETWEEN, >, < 등)에 효과적
3. Table Full Scan vs Index Range Scan 비교
| 항목 | Table Full Scan | Index Range Scan |
|---|---|---|
| 인덱스 사용 | 사용하지 않음 | 사용함 |
| 조회 대상 | 테이블 전체 | 조건에 맞는 일부 row |
| 성능 | 대용량 데이터에서 비효율적 | 상대적으로 매우 빠름 |
| 사용 조건 | 인덱스 없음 또는 부적합 | WHERE 조건이 인덱스 컬럼 기반 |
| 대표 예시 | SELECT * FROM user | SELECT * FROM user WHERE id = 10 |
4. EXPLAIN으로 실행 계획 확인
EXPLAIN SELECT * FROM user WHERE id = 100;
| type 값 | 의미 |
|---|---|
| ALL | Table Full Scan |
| range | Index Range Scan |
| ref, eq_ref | 인덱스 기반 단일 값 조회 |
| const | 상수 처리, 가장 빠른 형태 |