index clustering factor 

 - clustering_factor 수치가 테이블 블록에 가까울수록 데이터가 잘 정렬돼 있음을 의미하고, 

   레코드 개수에 가까울수록 흩어져 있음을 의미한다. 


클러스터링 팩터와 물리적 I/O 

 - 인덱스 CF가 좋다고 하면 인덱스 정렬 순서와 테이블 정렬 순서가 서로 비슷하다는 것을 의미

 - 이는 궁극적으로 물리적인 디스크 I/O 횟수를 감소시키는 효과를 가져다준다. 

 - clustering factor는 인덱스를 통해 테이블을 엑세스할 때 예상되는 논리적 I/O 개수를 

   더 정확히 표현하고 있다. 


버퍼 pinning에 의한 논리적 I/O 감소원리 

 - 인덱스를 통해 엑세스되는 하나의 테이블 버퍼 블록을 Pinning 한다. 

    

인덱스 손익분기점 

 - 인덱스가 Full table Scan 보다 더 느려지는 핵심적인 요인 

    ● index는 random 엑세스 , full table scan 은 sequential 엑세스 방식 

    ● index single block read , full table scan 은 Multiblock read

 - 인덱스 스캔 비효율이 없도록 구성된 인덱스를 이용해 부분범위처리르 방식으로 

   프로그램 구현시 인덱스의 효용성은 100%가 된다. 


손익분기점을 극복하기 위한 기능들 

 - IOT , 클러스터 테이블, 파티셔닝 



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

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

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

 인덱스 사용 불가능 경우 

   - 인덱스 컬럼 조건걸 가공 

   - 부정형 비교 

   - is null 

     ( is null 결합 컬럼시 다른 조건절이 사용되면 인덱스 사용 가능한 경우도 있음) 


묵시적 형변환 

  - varchar2 컬럼에 숫자 값을 더하거나 빼는 연산을 가하면 내부적으로 숫자형으로 

    형변환이 일어난다. 

  - 숫자형과 문자형이 비교될 때는 숫자형이 우선시 된다. 

    (만약 문자형 컬럼에 숫자로 변환할 수 없는 문자열이 들어 있으면 쿼리 에러) 

  - like로 비교 할 때는 숫자형이 문자형으로 변환 

  - decode(a,b,c,d) decode 함수의 형은 c 인자에 따라 결정

    ( null 일시 varchar2)  


함수 기반 인덱스 

  - 급할시 임시 방편으로 사용함

+ Recent posts