!http://www.gurubee.net/wiki/download/26744791/SQL_286.jpgh3.
ALTER SYSTEM SET OPTIMIZER_MODE = ALL_ROWS; --시스템 레벨
ALTER SESSION SET OPTIMIZER_MODE = ALL_ROWS; --세션 레벨
SELECT /*+ ALL_ROWS */ * FROM T WHERE ... ; --SQL 레벨
ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10;
SQL> ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10;
세션이 변경되었습니다.
SQL> SHOW PARAMETER OPTIMIZER_MODE;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
optimizer_mode string FIRST_ROWS_10
SELECT /*+ FIRST_ROWS(10) */ * FROM T WHERE ... ;
-- MS-SQL
SELECT * FROM T WHERE OPTION( fast 10 );
1 1
선택도 = ----------------------- = -----------------------
Distinct Value 개수 num distinct
SELECT * FROM 사원 WHERE 부서 = :부서
DISTINCT VALUE = 10
NUM_ROWS = 1000
선택도 = 1 / 10 = 0.1
카디널리티 = 1000 * 0.1 = 100
SELECT * FROM 사원 WHERE 부서 = :부서 AND 직급 = :직급
--부서
DISTINCT VALUE = 10
선택도 = 1 / 10 = 0.1
--직급
DISTINCT VALUE = 4
선택도 = 1 / 4 = 0.25
--카디널리티 = 1000 * 0.1 * 0.25 = 25
!http://www.gurubee.net/wiki/download/26744791/SQL_291.jpgh3.
비용 = blevel -- 인덱스 수직적 탐색 비용
+ (리프 블록 수 * 유효 인덱스 선택도) -- 인덱스 수평적 탐색 비용
+ (클러스터링 팩터 * 유효 테이블 선택도) -- 테이블 Random 액세스 비용
SELECT /*+ LEADING( E2 E1 ) USER_NL( E1 ) INDEX( E1 EMP_EMP_ID_PK )
USE_MERGE(J) FULL(J) */
E1.FIRST_NAME, E1. LAST_NAME, J.JOB_ID, SUM( E2.SALARY ) TOTAL_SAL
FROM EMPLOYEES E1, EMPLOYEES E2, JOB_HISTORY J
WHERE E1.EMPLOYEE_ID - E2.MANAGER_ID
AND E1.EMPLOYEE_ID = J.EMPLOYEE_ID
AND E1.HIRE_DATE = J.START_DATE
GROUP BY E.1FIRST_NAME, E1.LAST_NAME, J.JOB_ID
ORDER BY TOTAL_SAL;
-- EMP_ENAME_IDX NULL 허용 컬럼 인덱스
SELECT /*+ INDEX( E EMP_ENAME_IDX ) */ COUNT(*) FROM EMP E
분류 | 힌트 |
---|---|
최적화 | all_rows first_rows(n) |
액세스 | full cluster hash index, no_index index_asc, index_desc index_combine index_join index_ffs, no_index_ffs index_ss, no_index_ss index_ss_asc, index_ss_desc |
쿼리 변환 | no_query_transformation use_concat no_expand rewrite, no_rewrite merge, no_merge start_transformation, no_star_transformation fact, no_fact unnest, no_unnest |
조인순서 | ordered leading |
조인방식 | use_nl,no_use_nl use_nl_with_index use_merge, no_use_merge use_hash, no_use_hash |
병렬처리 | parallel, no_parallel pq_distribute parallel_index, no_parallel_index |
기타 | append, noappend cache, nocache push_pred, no_push_pred push_subq, no_push_subq qb_name cursor_sharing_exact driving_site dynamic_sampling model_min_analysis |
- 강좌 URL : http://www.gurubee.net/lecture/2400
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.