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 상수 처리, 가장 빠른 형태

results matching ""

    No results matching ""