h3.02 옵티마이저 행동에 영향을 미치는 요소
h4.옵티마이저 행동의 차이는 궁극적으로 실행계획의 차이
실행계획에 영향을 미치는 요소 (1) SQL과 연산자 형태 (2) 인덱스,IOT,클러스터링,파티셔닝,MV 등 옵티마이징 팩터 (3) 제약 설정 : PK, FK, Not Null, Check (4) 옵티마이저 힌트 (5) 통계정보 : 오브젝트 통계, 시스템 통계 (6) 옵티마이저 관련 파라미터 (7) DBMS 버전과 종류 |
---|
(1) SQL과 연산자 형태
SQL을 어떤 형태로 작성했는지 또는 어떤 연산자( =,in, like, between, 부등호 등)를 사용했는지에 따라 옴티마이저가 다른 선택을 할 수 있다
(2) 인덱스,IOT,클러스터링, 파티셔닝 MV 등 옵티마이징 팩터
(3) 제약 설정
데이터 무결성을 보장해 줄뿐만 아니라 옵티마이저가 쿼리 성능을 최적화 하는 데에 매우 중요한 정보를 제공한다.
PK, FK, Check, Not Null 같은 제약(constraint) 설정 기능을 이용해야 완벽한 데이터 무결성을 확보.
(4) 옵티마이저 힌트
힌트는 옵티마이저에게 매우 강한 영향력을 끼친다.
1. 문법적으로 맞지 않게 힌트를 기술 2. 잘못된 참조사용: 없는테이블이나(alias)을사용한 경우, 없는 인텍스명을지정한경우등 3. 의미적으로 맞지 않게 힌트를 기술 : 예를 들어, 서브쿼리에 unnest와 push_subq를 같이 기술한 경우(unnest되지 않은 서브쿼리만이 push_subq 힌트의 적용 대상이며 , 4장에서 자세히 설명함) 4. 논리적으로 불가능한 액세스 경로 : 조인절에 등치(=) 조건이 하나도 없는데 해시 조인으로 유 도하거나, 아래처럼 null 허용컬럼에 대한 인텍스를 이용해 전체 건수를 하려고 시도히는 등 se1ect /*+ index(e emp ename idx) / count() from emp e |
---|
(5) 통계정보
옵티마이저에게 미치는 영향력이 절대적
(6) 옵티마이저 관련 파라미터
11g {code:sql} SQL> select name, value, isdefault, default_value 2 from v$sys_optimizer_env 3 ; |
---|
NAME VALUE ISD DEFAULT_VALUE
47 개의 행이 선택되었습니다.
||
optimizer_features_enable 파라미터를 이전 버전으로 설정하면 된다.
alter system set optimizer_features_enable = "9.2.0.4";
!제목 없음.jpg!
!버전별 기능.jpg!
(7) DBMS 버전과 종류
||예)MIN/MAX SCAN예
{code:sql}
SQL> select max(empno) from scott.emp;
MAX(EMPNO)
----------
7934
Execution Plan
----------------------------------------------------------
Plan hash value: 1707959928
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 4 | | |
| 2 | INDEX FULL SCAN (MIN/MAX)| PK_EMP | 1 | 4 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
351 recursive calls
0 db block gets
63 consistent gets
14 physical reads
0 redo size
542 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select min(empno) mx, max(empno) mn from scott.emp a;
MX MN
---------- ----------
7369 7934
Execution Plan
----------------------------------------------------------
Plan hash value: 2937609675
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 4 | | |
| 2 | INDEX FULL SCAN| PK_EMP | 14 | 56 | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
1 consistent gets
0 physical reads
0 redo size
602 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
||