스캔 종류
- 테이블 스캔 : 테이블 데이터로 직접 접근
- 인덱스 스캔 : 인덱스를 통해 테이블 데이터에 접근
테이블 스캔
테이블 풀 스캔 ( Table Full Scan )
![](https://velog.velcdn.com/images/0_sujeong/post/5cdbac19-0047-4d56-a132-9b028db895ab/image.png)
- 테이블에 포함된 레코드를 처음부터 끝까지 읽어들임
where
조건문에 기준으로 활용할 인덱스가 없는 경우
- 대량의 데이터의 접근시 테이블 풀 스캔을 쓰면, 인덱스를 통한 랜덤 엑세스가 발생하지 않는 장점
인덱스 스캔
인덱스 풀 스캔 ( Index Full Scan )
![](https://velog.velcdn.com/images/0_sujeong/post/de5bc450-bc6e-4d4a-911f-715212a5d81c/image.png)
- 인덱스만 풀 스캔해 원하는 데이터를 가져오는 것
- 인덱스는 테이블의 일부 데이터를 사용
- 검색 되는 데이터 극히 일부면 좋음
인덱스 범위 스캔 ( Index Range Scan )
![](https://velog.velcdn.com/images/0_sujeong/post/2d587fdd-f9da-42c9-8664-74a0ebf7161e/image.png)
- 인덱스를 범위 기준으로 스캔한 뒤 스캔 결과를 토대로 테이블에 접근( BETWEEN ~ AND, LIKE, < 등을 사용시 )
- 좁은 범위로는 좋지만 넓은 범위로는 비효율적
인덱스 고유 스캔 ( Index Unique Scan )
![](https://velog.velcdn.com/images/0_sujeong/post/5278b3b2-b39e-4bd3-8e98-81dc90916e37/image.png)
- 수직적 탐색만으로 찾는 방식, 기본키나 고유 인덱스로 테이블에 접근( = 사용시 )
- 인덱스를 사용하는 방식 중 가장 효율적
인덱스 루스 스캔 ( Index Loose Scan )
![](https://velog.velcdn.com/images/0_sujeong/post/fb3b1670-dc0d-4c5d-824c-f140176eaca4/image.png)
- 인덱스에서 필요한 부분만 선택하여 스캔하는 방식,
where
조건문을 기준으로 불필요한 인덱스 키는 무시 ( GROUP BY, MAX(), MIN() 함수 포함 시 )
인덱스 병합 스캔 ( Index Merge Scan )
![](https://velog.velcdn.com/images/0_sujeong/post/aeffa8c4-4051-4564-8ebc-da62d9b67111/image.png)
- 테이블 내에 생성되 인덱스를 통합하여 스캔하는 방식
- WHERE문의 조건 열이 서로 다른 인덱스에 존재할 때 사용됨.
- 인덱스 병합 스캔은 물리적으로 존재하는 개별 인덱스를 각각 접근
index fast full scan
- index full scan 보다 빠름, 인덱스 구조를 따라서 스캔하지 않고 세그먼트 전체를 스캔
- 결과 집합 순서 보장이 안됨
참조
1. [DB] 테이블 데이터 스캔 방식 및 디스크 접근 정리
2. 인덱스 풀 스캔(INDEX FULLSCAN)
3. 인덱스 스캔 방식 및 인덱스 쿼리튜닝