[DB] 테이블 데이터 스캔 방식 및 디스크 접근 정리

double-oh·2021년 8월 30일
3

DB의 오브젝트 스캔 종류

  • 테이블 스캔: 인덱스를 거치지 않고 테이블의 데이터로 직접 접근
  • 인덱스 스캔: 인덱스를 통해 테이블 데이터에 접근

테이블 스캔

테이블 풀 스캔 (Table Full Scan)

  • 인덱스를 거치지 않고 테이블 데이터에 직행하여 처음과 끝까지 스캔하는 방식
  • WHERE 조건문을 기준으로 활용할 인덱스가 없는 경우 사용
  • 대량의 데이터에 접근할 때 테이블 풀 스캔을 쓰면, 인덱스를 통한 랜덤 액서스가 발생하지 않아 이점이 있음.

인덱스 스캔

인덱스 풀 스캔 (Index Full Scan)

  • 테이블에 접근하지 않고, 인덱스 내의 열만을 참조하여 처음부터 끝까지 스캔하여 데이터에 접근하는 방식
  • 인덱스는 테이블의 일부 데이터를 사용하므로, 테이블 풀 스캔보다는 유리함.

인덱스 범위 스캔 (Index Range Scan)

  • SQL문에 BETWEEN ~ AND, LIKE, < 등을 사용했을 때, 인덱스를 범위 기준으로 스캔한 뒤, 스캔 결과를 토대로 테이블에 접근
  • 좁은 범위를 대상으로 수행할 경우는 이점이 있지만, 넓은 범위를 대상으로는 비효율적인 방식

인덱스 고유 스캔 (Index Unique Scan)

  • WHERE문에 = 을 사용하였을 때, 기본키나 고유 인덱스로 테이블에 접근하는 방식
  • 인덱스를 사용하는 방식 중 가장 효율적인 스캔 방식

인덱스 루스 스캔 (Index Loose Scan)

  • 인덱스에서 필요한 부분만 선택하여 스캔하는 방식
  • 인덱스 범위 스캔처럼 넓은 범위에 전부 접근하지 않고, WHERE 조건문 기준으로 필요한 데이터와 불필요한 데이터를 구분한 뒤 불필요한 인덱스 키는 무시
  • 보통 GROUP BY, MAX(), MIN() 함수 포함 시 동작

인덱스 병합 스캔 (Index Merge Scan)

  • 테이블 내에 생성되 인덱스를 통합하여 스캔하는 방식
  • WHERE문의 조건 열이 서로 다른 인덱스에 존재할 때 사용됨.
  • 인덱스 병합 스캔은 물리적으로 존재하는 개별 인덱스를 각각 접근하므로

디스크 접근 방식

시퀀셜 액세스

  • 물리적으로 인접한 페이지를 순차적으로 읽는 방식
  • 디스크 헤더의 움직임을 최소화하여 작업시간과 리소스 점유 시간을 줄일 수 있음.
  • 테이블 풀 스캔이 동작하는 방식

랜덤 액세스

  • 물리적으로 떨어진 페이지를 임의로 접근하는 방식
  • 디스크 헤더에 많은 움직임을 요구하여, 데이터 접근 시간이 오래 걸림.
  • 접근 범위를 줄이는 방식으로 튜닝이 필요할 수 있음.
profile
Yes, Code Wins Arguments!!

1개의 댓글

comment-user-thumbnail
2022년 12월 12일

잘 읽고 갑니다. 덕분에 테이블 풀 스캔에 대해 잘 이해했어요 ! :)

답글 달기