double-oh.log
로그인
double-oh.log
로그인
[DB] 테이블 데이터 스캔 방식 및 디스크 접근 정리
double-oh
·
2021년 8월 30일
팔로우
4
SCAN
db
스캔
4
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문의 조건 열이 서로 다른 인덱스에 존재할 때 사용됨.
인덱스 병합 스캔은 물리적으로 존재하는 개별 인덱스를 각각 접근하므로
디스크 접근 방식
시퀀셜 액세스
물리적으로 인접한 페이지를 순차적으로 읽는 방식
디스크 헤더의 움직임을 최소화하여 작업시간과 리소스 점유 시간을 줄일 수 있음.
테이블 풀 스캔이 동작하는 방식
랜덤 액세스
물리적으로 떨어진 페이지를 임의로 접근하는 방식
디스크 헤더에 많은 움직임을 요구하여, 데이터 접근 시간이 오래 걸림.
접근 범위를 줄이는 방식으로 튜닝이 필요할 수 있음.
double-oh
Yes, Code Wins Arguments!!
팔로우
이전 포스트
[Spring Boot] Spring Boot로 페이스북 메신저 연동
다음 포스트
spring boot + prometheus + grafana
1개의 댓글
댓글 작성
공수정
2022년 12월 12일
잘 읽고 갑니다. 덕분에 테이블 풀 스캔에 대해 잘 이해했어요 ! :)
답글 달기
잘 읽고 갑니다. 덕분에 테이블 풀 스캔에 대해 잘 이해했어요 ! :)