실행계획의 유형
스캔을 위한 실행계획
데이터 연결을 위한 실행 계획
각종 연산을 위한 실행계획
비트맵 실행계획
기타 특수한 목적을 처리하는 실행계획
select * from emp , dept where dmp.deptno = dept.deptno
and not exists (select * from salgrade where emp.sal between losal and hisal)
id operation options object name
1 6. filter
2 4. nested loops
3 1. table access (full) emp
4 3. table access (by rowid) dept
5 2. index (unique scan) pk_dept
6 5. table access (full) salgrade
cr = number of buffers - retrieved for or reads
pr = number of physical reads
pw = number of physical writes
time = elapsed of time , microsecond(us)
$oracle_home/rdbms/admin/utlxplan.sql
create unique index plan_index on plan_table (statement_id , id)
수동 explain plan set statement_id = 'a1'
for select col3 ,sum(col4) from tab1
where a.col1 in (10,50) group by col3
자동 set auto traceonly exp
select col3 ,sum(col4) from tab1
where a.col1 in (10,50) group by col3
전체테이블 스캔
High water mark 내에 있는 모든 블록을 스캔
--> 사용된 저장공간의 총합계 또는 데이터를 INSERT 하기 위한 포맷된 영역 표시
멀티 블록 I/O
옵티마이저의 전체테이블 스캔 선택사유
적용가는 인덱스의 부재
넓은 범위의 데이터 엑세스
소량의 테이블 엑세스
병렬처리 엑세스
인덱스 스캔
인덱스 유일 스캔
- 대부분 단 하나의 row 추출
- 전제조건을 만족할 경우 옵티마이저는 인덱스 유일 스캔을 선택
- 데이터베이스 링크 사용시 힌트로 적용
- 힌트는 index (table_alias_index_name) 힌트적용
인덱스 범위 스캔
- 추출되는 row 는 index 구성컬럼의 정렬순서와 동일
- order by 절에 있더라도 추가정렬작업에 필요없을 수도 있음
데이터 연결을 위한 실행계획
내포조인 nested loop join
가장 고전적 형태의 조인방식이나 현실적으로 가장 많이 적용
single block i/o
전처리 집합의 처리범위가 전체 일량을 좌우
다량의 랜덤 엑세스 발생
따라서 소량의 엑세스는 유용, 다량의 엑세스는 큰 부하 발생
nested loops join = 내포조인 = 중첩루프조인
정렬변합 sort merged join
해쉬조인 hash join
세미조인 semi join
카티전 조인 cartesian join
아우터 조인 outer join
인덱스 조인 index join
댓글 없음:
댓글 쓰기