DB/일반

Index Scan 종류

창욱씨 2022. 3. 31. 01:25
728x90

Index Range Scan

B-tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식입니다. 인덱스 루트에서 리프 블록까지 수직적 탐색을 하고 필요한 범위만큼 수평정 탐색하는 스캔 방식입니다. Index Range Scan을 하려면 선두 컬럼을 가공하지 않은 상태로 조건절에 사용해야 합니다.

Index Full Scan

Index Full Scan은 수직적 탐색 없이 인덱스 리프 블록 처음부터 끝까지 수평적으로 탐색하는 방식입니다. 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택됩니다.

만약, 인덱스 선두 컬럼이 조건절에 없으면 옵티마이저는 먼저 Table Full Scan 방식을 고려합니다. 그런데 대용량 테이블인 경우에 Table Full Scan 방식이 부담된다면 옵티마이저는 인덱스를 활용하는 방안을 고려합니다.

인덱스가 차지하는 면적은 테이블이 차지하는 면적보다 훨씬 적습니다. 인덱스 스캔 단계에서 대부분 레코드를 필터링하고 아주 일부만 테이블 액세스할 수 있다면 Table Full Scan보다 Index Full Scan 방식이 유리합니다.

Index Unique Scan

Index Unique Scan은 수직적 탐색으로만 데이터를 찾는 방식입니다. Unique 인덱스를 '=' 조건으로 탐색하는 경우에 동작합니다. Unique 인덱스가 존재하는 컬럼은 중복 값이 존재하지 않기 때문에 '=' 조건으로 검색할 때, 데이터를 한 건 찾고 나서는 더 이상 탐색할 필요가 없습니다. 만약, Unique 인덱스라고 해도 between, like 등의 범위 조건으로 검색하면 Index Range Scan으로 처리됩니다.

Index Skip Scan

Index Skip Scan은 조건절에 빠진 선행 인덱스 컬럼의 Distinct Value 개수가 적고 후행 컬럼의 Distinct Value 개수가 많을 때 유용합니다. Index Skip Scan은 루트 또는 브랜치 블록에서 읽은 커럼 값 정보를 이용해서 조건절에 부합하는 레코드를 포함할 가능성이 있는 리프 블록만 액세스합니다.

Index Fast Full Scan

Index Fast Full Scan은 논리적인 인덱스 트리 구조를 무시하고 인덱스 세그먼트 전체를 Multiblock I/O 방식으로 스캔하는 방식입니다. Index Fast Full Scan 방식은 속도가 빠르지만 인덱스 트리 구조를 무시하고 읽기 때문에 결과 집합이 인덱스 키 순서대로 정렬되어 있지 않습니다. 그리고 쿼리에 사용한 컬럼이 모두 이넫ㄱ스에 포함되어 있을 경우에만 사용 가능합니다.

728x90