선택도 

 - 선택도는 전체 대상 레코드 중에서 특정 조건에 의해 선택될 것으로 예상되는 

    레코드 비율(%)을 말한다. 

 - 선택도 -> 카디널리티 -> 비용 -> 엑세스 방식, 조인 순서, 조인 방법 등 결정 

 - 히스토그램 없이 부등호, between 같은 범위검색 조건에 대한 선택도를 구하는 기본 공식은 

   다음과 같다.   

   선택도 = 조건절에서 요청한 값 범위 / 전체 값 범위 

 - 분자 , 분모에 사용된 두개의 '갑 범위'는 컬럼 통계로서 수집된 high_value, low_value 

   , num_distinct 등을 이용해 구한다. 

 - 컬럼 히스토그램이 없을 때 옵티마이저는 '조건걸에서 요청한 값 범위'에 속한 값들이 

    '전체 값 범위'에 고르게 분포돼 있음을 가정하고 선택도를 구한다. 


카디널리티 

 - 특정 액세스 단계를 거치고 나서 출력될 것으로 예상되는 결과 건수 

 - num_rows는 테이블 통계에서, num_distinct는 컬럼 통계에서 확인할 수 있다. 

     ● 테이블 통계 : dba_tables, dba

     ● 컬럼 통계 : dba_tab_columns, dba_tab_col_statistics


Null 값을 포함할 때 

 - null 값을 제외하고  카디널리티가 계산된다. (바인드 변수가 아닐 시) 


조건절이 두 개 이상일 때 

 - 각 컬럼의 선택도와 전체 로우 수를 곱해 주기만 하면 된다. 


범위검색 조건일 때 

 - 옵티마이저는 조건절에서 요청한 범위에 속한 값들이 전체 값 범위에 고르게 분포돼 있음을 

   가정한다. 


cardinality 힌트를 이용한 실행계획 제어 

 - cardinality 를 임의로 적어주는 힌트 /*+ cardinality(table 16) */ 

     ( 이런 식으로 cardinality 숫자를 적어 줄 수 있다. ) 

 - 10g 부터는 opt_estimate를 이용할 수 있다. 

    /*+ opt_estimate (table, d, scale_rows=4 ) */ 

    ( 옵티마이저가 예상한 카디널리티에 4를 곱하라는 의미 )

+ Recent posts