index range scan
index full scan
- 인덱스 스캔 후 필터가 많이 되어 random access 부하를 줄일 수 있을 때
- 필요한 컬럼이 인덱스에 모두 포함되어 있어서 따로 테이블 접근이 필요 없을 때
index Unique scan
- 등치 조건 검색에서 발생
index skip scan
- 인덱스 선두 컬럼의 조건절이 빠졌어도 인덱스를 활용하는 방법
( 선두 컬럼의 Distinct Value 개수가 적고 후행 컬럼의 Distinct Value 개수가 많을 때 유리 )
- 버퍼 pinning을 이용한 Skip scan 원리
● 래치 획득 과정 없이 버퍼 Pinning을 통해 블록을 곧바로 액세스할 때는 buffer is pinned count 항목의 수치가 증가한다.
● 버퍼 Pinning은 하나의 데이터베이스 Call(Parse Call, Execute Call, Fetch Call)내에서만 유효하다.
(Call이 끝나고 사용자에게 결과를 반환하고 나면 Pin은 해제되어야 한다.
따라서 첫 번째 Fetch Call에서 Pin된 블록은 두 번째 Fetch Call에서 다시 래치 획득 과정을 거쳐 Pin 되어야 한다.)
- index skip scan 작동 조건
● 선두 컬럼이 없을 때
● 선두 컬럼은 있고 중간 칼럼이 빠졌을 때
● 선두의 2개의 컬럼이 빠졌을 때
● 선두 컬럼이 범위 검색 조건일 때
- In-list 와는 수행원리가 다름
(in-linst는 반복 수행)
- index range scan descending
index fast full scan
- 물리적인 순서로 블락을 읽어 들인다. (multi block I/O)
(index full scan 과 block I/o 양은 비슷하지만 수행 속도와 대기 이벤트량이 다르다.)
- 테이블 엑세스 없이 index만 읽고 처리할 때 index range scan 이나 index full scan 시에도
multi block I/O가 발생
- index fast full scan의 특징
● 세그먼트 전체를 스캔
● 결과집합 순서 보장 안 됨
● Multiblock I/O
● 병렬스캔 가능
● 인덱스에 포함된 컬럼으로만 조회할 때 사용가능
- index fast full scan의 호용
● 스캔해야 할 건수는 많더라도 조건절에 필터링되고 나서 최종 결과 건수가 적을 때
( 부분범위 처리가 가능한 애플리케이션 환경이라면 역시 손해 볼 것 )
● 컬럼 개수가 많아 테이블보다 인덱스 크기가 현저히 작은 상황에서 효과
● 병렬쿼리 가능
and-equal, index combine, index join
- And-equal : 10g 부터 폐기된 기능
- Index Combine
● 인덱스를 bit-map인덱스로 바꾸고 그것을 bit-wise 하는 것
● 데이터 분포도가 좋지 않은 두개 이상의 인덱스를 결합해
테이블 Random 엑세스를 줄이는것이 목표
● And-equal 에 비해 향상된 점
조건절이 '=' 이어야 할 필요가 없고
Non unique 인덱스일 필요도 없다.
조건절이 or로 결합된 경우에도 유용
- index join
● 테이블 엑세스 없이 결과 집합을 만들기 위한 스캔 방식
● index join은 해시 조인 매커니즘들 그대로 사용한다.
● index join은 쿼리에 사용된 컬럼들이 인덱스에 모두 포함될 때만 작동
( 둘 중 어느 한쪽에 포함되기만 하면 된다.)
* 인덱스를 이용한 소트 연산 대체
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 1-5. 테이블 random 엑세스 최소화 튜닝 (0) | 2016.12.26 |
---|---|
성능고도화 1-4. 테이블 random 엑세스 부하 (0) | 2016.12.26 |
성능고도화 1-2. 인덱스 기본원리 (0) | 2016.12.26 |
성능고도화 1-1. 인덱스 구조 (0) | 2016.12.26 |
2016년 4월달 SQLP 시험 실기 (0) | 2016.11.25 |