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은 쿼리에 사용된 컬럼들이 인덱스에 모두 포함될 때만 작동 

        ( 둘 중 어느 한쪽에 포함되기만 하면 된다.)

* 인덱스를 이용한 소트 연산 대체   

+ Recent posts