[친절한 SQL 튜닝] INDEX FULL SCAN과 TABLE FULL SCAN

Euiyeon Park·2025년 6월 8일
0

친절한 SQL 튜닝

목록 보기
13/13
post-thumbnail

Table Full Scan

  • 테이블의 모든 블록을 처음부터 끝까지 읽는 방식
  • 조건과 관계없이 모든 Row를 다 읽고 필요한 조건을 나중에 필터링

🍀 사용되는 상황

  • WHERE 조건이 인덱스를 사용할 수 없는 경우
  • 조건이 없거나, 너무 많은 Row를 반환하는 조건(WHERE salary > 100)
  • 인덱스를 사용해도 효율이 낮은 경우 (인덱스 사용 시 I/O 비용 > Table Full Scan)
  • 옵티마이저가 Table Full Scan이 더 빠르다고 판단할 때
  • /*+ FULL */ 힌트를 명시했을 때

🍀 성능 특징

  • Multiblock I/O 방식으로 상대적으로 빠르게 읽을 수 있음
  • 큰 테이블에서 많은 데이터를 읽을 때는 오히려 효율적일 수 있음
  • 병렬 처리(PQ)도 용이

Index Full Scan

  • 인덱스의 루트부터 리프까지 전체 노드를 순차적으로 모두 스캔
  • 테이블은 접근하지 않고, 인덱스만을 통해 필요한 데이터를 모두 가져올 수 있을 때 사용

🍀 사용되는 상황

  • 인덱스가 WHERE, SELECT절에 있는 모든 컬럼을 포함할 때 -커버링 인덱스
    (테이블 접근 없이 인덱스만으로 처리 가능한 경우)
  • ORDER BYGROUP BY에서 정렬을 위한 인덱스를 사용하는 경우
  • 옵티마이저가 인덱스 전부 읽는 것이 더 낫다고 판단할 경우
  • /*+ INDEX_FFS */ 힌트 사용 시

🍀 성능 특징

  • 테이블을 접근하지 않음 → Disk I/O 줄어듦
  • 주로 인덱스 컬럼만 필요할 때 유리
  • 읽기 순서가 정렬된 상태이므로 정렬이 불필요한 경우도 있음
  • 인덱스 전체를 읽으므로 레코드 수가 많으면 비용 발생
profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글