스캔 종류
- 테이블 스캔 : 테이블 데이터로 직접 접근
- 인덱스 스캔 : 인덱스를 통해 테이블 데이터에 접근
테이블 스캔
테이블 풀 스캔 ( Table Full Scan )
- 테이블에 포함된 레코드를 처음부터 끝까지 읽어들임
where
조건문에 기준으로 활용할 인덱스가 없는 경우
- 대량의 데이터의 접근시 테이블 풀 스캔을 쓰면, 인덱스를 통한 랜덤 엑세스가 발생하지 않는 장점
인덱스 스캔
인덱스 풀 스캔 ( Index Full Scan )
- 인덱스만 풀 스캔해 원하는 데이터를 가져오는 것
- 인덱스는 테이블의 일부 데이터를 사용
- 검색 되는 데이터 극히 일부면 좋음
인덱스 범위 스캔 ( Index Range Scan )
- 인덱스를 범위 기준으로 스캔한 뒤 스캔 결과를 토대로 테이블에 접근( BETWEEN ~ AND, LIKE, < 등을 사용시 )
- 좁은 범위로는 좋지만 넓은 범위로는 비효율적
인덱스 고유 스캔 ( Index Unique Scan )
- 수직적 탐색만으로 찾는 방식, 기본키나 고유 인덱스로 테이블에 접근( = 사용시 )
- 인덱스를 사용하는 방식 중 가장 효율적
인덱스 루스 스캔 ( Index Loose Scan )
- 인덱스에서 필요한 부분만 선택하여 스캔하는 방식,
where
조건문을 기준으로 불필요한 인덱스 키는 무시 ( GROUP BY, MAX(), MIN() 함수 포함 시 )
인덱스 병합 스캔 ( Index Merge Scan )
- 테이블 내에 생성되 인덱스를 통합하여 스캔하는 방식
- WHERE문의 조건 열이 서로 다른 인덱스에 존재할 때 사용됨.
- 인덱스 병합 스캔은 물리적으로 존재하는 개별 인덱스를 각각 접근
index fast full scan
- index full scan 보다 빠름, 인덱스 구조를 따라서 스캔하지 않고 세그먼트 전체를 스캔
- 결과 집합 순서 보장이 안됨
참조
1. [DB] 테이블 데이터 스캔 방식 및 디스크 접근 정리
2. 인덱스 풀 스캔(INDEX FULLSCAN)
3. 인덱스 스캔 방식 및 인덱스 쿼리튜닝