선택도
- 선택도는 전체 대상 레코드 중에서 특정 조건에 의해 선택될 것으로 예상되는
레코드 비율(%)을 말한다.
- 선택도 -> 카디널리티 -> 비용 -> 엑세스 방식, 조인 순서, 조인 방법 등 결정
- 히스토그램 없이 부등호, 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를 곱하라는 의미 )
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 3-7. 비용 (0) | 2016.12.26 |
---|---|
성능고도화 3-6 히스토그램 (0) | 2016.12.26 |
성능고도화 3-4. 통계정보1 (0) | 2016.12.26 |
성능고도화 3-3. 옵티마이저의 한계 (0) | 2016.12.26 |
성능고도화 3-2 옵티마이저 행동에 영향을 미치는 요소 (0) | 2016.12.26 |