SlideShare a Scribd company logo
오라클힌트 for SQL튜닝 #17
Simple, Complex View Merging
Query Transformation?
Query Transformation Hint(merge, no_merge)
이종철, 탑크리에듀(www.topcredu.co.kr)
실습코드 및 다시보기는 다음 URL에서 가능합니다.
http://ojc.asia
Query Transformation이란?
• 오라클 옵티마이저는 인라인뷰, 서브쿼리등 복잡한 쿼리문에 대해 한번에 실행계획을
세우지 않고 각각의 쿼리 블록 단위로 실행계획을 세운 후 이를 하나로 합치는 과정을
진행하는데 이 과정에서 각각의 쿼리 블록을 따로따로 실행하는 계획보다는 하나로 묶
어서 변경된 실행계획을 수립하기를 선호한다.
• 이것이 Query Transformation이며 이 경우 다양한 접근경로(Index 또는 Full Table Scan),
조인순서(어떤 테이블을 먼저 드라이빙을 할 것인지), 조인방법(중첩루프, 해시, 머지조
인중 어떤 방법으로?)을 선택할 수 있으므로 효율적인 실행계획을 수립할 가능성이 높다.
하지만 늘 최선이지는 않다.
Query Transformation Example
• 좌측 쿼리는 맨바깥쪽 메인쿼리블럭 하나, 인
라인뷰 두개, 서브쿼리에 하나의 블록 총 4개
의 쿼리블럭으로 구성되어 있다.
• 이 쿼리가 실행되면 각각의 쿼리블럭을 따로
실행하는 실행계획을 수립하지 않고 다음과 같
이 EMP를 FULL SCAN하면서 두 인라인뷰를
Merge 하는데 "JOB"='CLERK' AND
("EMP"."DEPTNO"=10 OR "EMP"."DEPTNO"=20)
데이터를 찾은 후 DEPT의 PK인덱스를 경유하
여 10, 20번 부서를 찾으면서 중첩루프조인을
먼저 수행한다.
select e.*, d.*
from (select * from emp where job = ‘CLERK’) e
(select * from dept where deptno in (10, 20))
d
where e.deptno = d.deptno
order by (select dname from dept d1 where
e.deptno = d1.deptno )
View Merging 이란?
• 쿼리문을 블럭화 하기 위해 서브쿼리, 인라인 뷰등을 자주 사용하는데 오라클 옵
티마이저가 인라인뷰, 서브쿼리를 해석할 때 독자적으로 실행하지 않고 메인쿼
리와 함께 실행되는 경우, 즉 쿼리블럭을 풀어서 기존 쿼리와 함께 최적화를 수
행하는 것을 뷰 머징(View Merging)이라고 한다.
• 인라인뷰나 서브쿼리등이 많아 지면 옵티마이저가 뷰 머징을 해서 쿼리 성능이
안좋아질 수가 있다.
• 서브쿼리, 인라인 뷰등에서 ROWNUM을 사용하면 뷰 머징을 방지하는 효과가 있
다.
merge, no_merge 힌트
• /*+ merge(view_name) */
view merging을 하라는 힌트,
뷰를 풀어서 다른 쿼리와 병합
해서 실행하도록 계획을 수립
한다.
• /*+ no_merge(view_name) */
view merging을 하지말라는 힌
트, 뷰를 다른 쿼리와 병합하지
않고 자체적으로 실행하는 실
행계획을 만든다.
select /*+ merge(e) */
dname, sumsal
from mydept1 d,
(select deptno, sum(sal) sumsal
from myemp1
group by deptno) e
where e.deptno = d.deptno;
select dname, sumsal
from mydept1 d,
(select /*+ merge */ deptno, sum(sal) sumsal
from myemp1
group by deptno) e
where e.deptno = d.deptno;
Simple View Merging
• 하나의 BASE TABLE을 가지고 WHERE절 조건문, 단순 조인문을 가지는 단순뷰인 경우
VIEW MERGING이 발생할 수 있으며 이를 막으려면 no_merge 힌트를 사용해야 한다.
-- 아래 쿼리는 오라클 옵티마이저가 뷰 머징을 한다.
-- 인라인뷰를 먼저 실행하지 않고 아래 오른쪽 쿼리처럼 쿼리를 풀어서 실행한다.
select e.ename, d.dname
from emp e,
(select d.deptno, d.dname
from dept d
where d.deptno in (10, 20)) d
where d.deptno = e.deptno
and e.ename like '%S%';
select e.ename, d.dname, d.loc
from emp e, dept d
where d.deptno = e.deptno
and d.deptno in (10, 20)
and e.ename like '%S%';
Complex View Merging - 1
• Group by, Distinct를 포함한 복합 뷰(Complex View)는 “_complex_view_merging” 파라
미터 설정 또는 힌트를 이용하면 View Merging이 가능하며 Rownum, Distinct, Outer-
join, Connect by, Set operators(Union, Union All, Intersect, Minus), Group By 없이
Aggregation(Avg, Count, Sum, Max, Min)함수를 사용하면 뷰 머징이 불가능 하다.
• Oracle 11g의 Internal Oracle parameter “_complex_view_merging”는 TRUE로 설정되
어 있어서 복합뷰라도 뷰 머징을 시도하여 뷰 머징된 경우와 독자적으로 실행되는 경우
의 비용을 계산하여 비용이 낮을때만 뷰 머징을 한다.
SQL> select ksppinm, ksppstvl
from x$ksppi x, x$ksppcv y
where (x.indx = y.indx)
and (translate(ksppinm,'_','#') like '%merging%');
-- 세션 레벨에서 파라미터 설정
SQL> ALTER SESSION SET "_COMPLEX_VIEW_MERGING" = FALSE;
_complex_view_merging TRUE
_simple_view_merging TRUE
optimizer_secure_view_merging TRUE
Complex View Merging - 2
• 복잡한 쿼리에서 복합 뷰에 대한 뷰 머징 발생시 성능이 저하 될 수도 있으니 주의 해야
한다. no_merge 힌트 또는 세션 레벨에서 “_COMPLEX_VIEW_MERGING” 파라미터 값을
FALSE로 변경하여 막을 수 있다.
-- _complex_view_merging TRUE상태 뷰 머징 할 수 있지만
-- COST가 좋지 않아 뷰 머징을 하지 않는다.
-- 인라인뷰를 먼저 실행하고 DEPT와 해시조인,2.3초
select dname, sumsal from mydept1 d,
(select deptno, sum(sal) sumsal from myemp1
group by deptno) e
where e.deptno = d.deptno;
-- 4.8초, 뷰 머징을 한다.
select /*+ merge(e) */
dname, sumsal from mydept1 d,
(select deptno, sum(sal) sumsal
from myemp1
group by deptno) e
where e.deptno = d.deptno;
View Merging Example - 1
• -- 힌트없이 실행시 뷰 머징을 한다. 4.5초(뷰 머징을 하지않는 경우가 쿼리 성능이 뛰어남에도)
• -- 인라인뷰를 먼저 실행하지 않고 MYSUGANG1 테이블의 PK인덱스로 드라이빙을 하고
• -- MYDEPT1과 머지조인 후 MYEMP1과 해시조인한다.
select e1.ename, e1.dname
from (select empno, ename, dname
from myemp1 e, mydept1 d
where e.sal > 1000000 ) e1,
(select empno from mysugang1
where empno > 1000000 ) s
where e1.empno = s.empno;
View Merging Example - 2
-- ROWNUM을 사용하면 뷰 머징을 방지할 수 있다. 인라인뷰를 각각 실행 후 해시조인
-- 뷰 머징을 막아 쿼리 수행시간 단축 3.7초
select e1.ename, e1.dname
from
(select rownum, empno, ename, dname
from myemp1 e, mydept1 d
where e.sal > 1000000 ) e1,
(select rownum, empno from mysugang1
where empno > 1000000 ) s
where e1.empno = s.empno;
View Merging Example - 3
-- 뷰 머징을 방지하기 위한 힌트 사용
-- 뷰 머징을 막아 쿼리 수행시간 단축 3.7초
select e1.ename, e1.dname
from
(select /*+ no_merge */ empno, ename, dname
from myemp1 e, mydept1 d
where e.sal > 1000000 ) e1,
(select /*+ no_merge */ empno from mysugang1
where empno > 1000000 ) s
where e1.empno = s.empno;
View Merging Example - 4
-- 뷰 머징을 허라는 힌트 사용
select e1.ename, e1.dname
from
(select /*+ merge */ empno, ename, dname
from myemp1 e, mydept1 d
where e.sal > 1000000 ) e1,
(select /*+ merge */ empno from mysugang1
where empno > 1000000 ) s
where e1.empno = s.empno;
This practice makes Expert!
PL/SQL단기속성(1일완성)SQL힌트/튜닝(단기2일교육)SQL기초과정

More Related Content

Viewers also liked

#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Viewers also liked (11)

#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
 
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
 
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

(추천SQL교육, View Merging)오라클힌트 for SQL 튜닝, 단순뷰, 복합뷰의 뷰 머지(view merge), Query Transformation Hint (merge, no_merge)

  • 1. 오라클힌트 for SQL튜닝 #17 Simple, Complex View Merging Query Transformation? Query Transformation Hint(merge, no_merge) 이종철, 탑크리에듀(www.topcredu.co.kr)
  • 2. 실습코드 및 다시보기는 다음 URL에서 가능합니다. http://ojc.asia
  • 3. Query Transformation이란? • 오라클 옵티마이저는 인라인뷰, 서브쿼리등 복잡한 쿼리문에 대해 한번에 실행계획을 세우지 않고 각각의 쿼리 블록 단위로 실행계획을 세운 후 이를 하나로 합치는 과정을 진행하는데 이 과정에서 각각의 쿼리 블록을 따로따로 실행하는 계획보다는 하나로 묶 어서 변경된 실행계획을 수립하기를 선호한다. • 이것이 Query Transformation이며 이 경우 다양한 접근경로(Index 또는 Full Table Scan), 조인순서(어떤 테이블을 먼저 드라이빙을 할 것인지), 조인방법(중첩루프, 해시, 머지조 인중 어떤 방법으로?)을 선택할 수 있으므로 효율적인 실행계획을 수립할 가능성이 높다. 하지만 늘 최선이지는 않다.
  • 4. Query Transformation Example • 좌측 쿼리는 맨바깥쪽 메인쿼리블럭 하나, 인 라인뷰 두개, 서브쿼리에 하나의 블록 총 4개 의 쿼리블럭으로 구성되어 있다. • 이 쿼리가 실행되면 각각의 쿼리블럭을 따로 실행하는 실행계획을 수립하지 않고 다음과 같 이 EMP를 FULL SCAN하면서 두 인라인뷰를 Merge 하는데 "JOB"='CLERK' AND ("EMP"."DEPTNO"=10 OR "EMP"."DEPTNO"=20) 데이터를 찾은 후 DEPT의 PK인덱스를 경유하 여 10, 20번 부서를 찾으면서 중첩루프조인을 먼저 수행한다. select e.*, d.* from (select * from emp where job = ‘CLERK’) e (select * from dept where deptno in (10, 20)) d where e.deptno = d.deptno order by (select dname from dept d1 where e.deptno = d1.deptno )
  • 5. View Merging 이란? • 쿼리문을 블럭화 하기 위해 서브쿼리, 인라인 뷰등을 자주 사용하는데 오라클 옵 티마이저가 인라인뷰, 서브쿼리를 해석할 때 독자적으로 실행하지 않고 메인쿼 리와 함께 실행되는 경우, 즉 쿼리블럭을 풀어서 기존 쿼리와 함께 최적화를 수 행하는 것을 뷰 머징(View Merging)이라고 한다. • 인라인뷰나 서브쿼리등이 많아 지면 옵티마이저가 뷰 머징을 해서 쿼리 성능이 안좋아질 수가 있다. • 서브쿼리, 인라인 뷰등에서 ROWNUM을 사용하면 뷰 머징을 방지하는 효과가 있 다.
  • 6. merge, no_merge 힌트 • /*+ merge(view_name) */ view merging을 하라는 힌트, 뷰를 풀어서 다른 쿼리와 병합 해서 실행하도록 계획을 수립 한다. • /*+ no_merge(view_name) */ view merging을 하지말라는 힌 트, 뷰를 다른 쿼리와 병합하지 않고 자체적으로 실행하는 실 행계획을 만든다. select /*+ merge(e) */ dname, sumsal from mydept1 d, (select deptno, sum(sal) sumsal from myemp1 group by deptno) e where e.deptno = d.deptno; select dname, sumsal from mydept1 d, (select /*+ merge */ deptno, sum(sal) sumsal from myemp1 group by deptno) e where e.deptno = d.deptno;
  • 7. Simple View Merging • 하나의 BASE TABLE을 가지고 WHERE절 조건문, 단순 조인문을 가지는 단순뷰인 경우 VIEW MERGING이 발생할 수 있으며 이를 막으려면 no_merge 힌트를 사용해야 한다. -- 아래 쿼리는 오라클 옵티마이저가 뷰 머징을 한다. -- 인라인뷰를 먼저 실행하지 않고 아래 오른쪽 쿼리처럼 쿼리를 풀어서 실행한다. select e.ename, d.dname from emp e, (select d.deptno, d.dname from dept d where d.deptno in (10, 20)) d where d.deptno = e.deptno and e.ename like '%S%'; select e.ename, d.dname, d.loc from emp e, dept d where d.deptno = e.deptno and d.deptno in (10, 20) and e.ename like '%S%';
  • 8. Complex View Merging - 1 • Group by, Distinct를 포함한 복합 뷰(Complex View)는 “_complex_view_merging” 파라 미터 설정 또는 힌트를 이용하면 View Merging이 가능하며 Rownum, Distinct, Outer- join, Connect by, Set operators(Union, Union All, Intersect, Minus), Group By 없이 Aggregation(Avg, Count, Sum, Max, Min)함수를 사용하면 뷰 머징이 불가능 하다. • Oracle 11g의 Internal Oracle parameter “_complex_view_merging”는 TRUE로 설정되 어 있어서 복합뷰라도 뷰 머징을 시도하여 뷰 머징된 경우와 독자적으로 실행되는 경우 의 비용을 계산하여 비용이 낮을때만 뷰 머징을 한다. SQL> select ksppinm, ksppstvl from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and (translate(ksppinm,'_','#') like '%merging%'); -- 세션 레벨에서 파라미터 설정 SQL> ALTER SESSION SET "_COMPLEX_VIEW_MERGING" = FALSE; _complex_view_merging TRUE _simple_view_merging TRUE optimizer_secure_view_merging TRUE
  • 9. Complex View Merging - 2 • 복잡한 쿼리에서 복합 뷰에 대한 뷰 머징 발생시 성능이 저하 될 수도 있으니 주의 해야 한다. no_merge 힌트 또는 세션 레벨에서 “_COMPLEX_VIEW_MERGING” 파라미터 값을 FALSE로 변경하여 막을 수 있다. -- _complex_view_merging TRUE상태 뷰 머징 할 수 있지만 -- COST가 좋지 않아 뷰 머징을 하지 않는다. -- 인라인뷰를 먼저 실행하고 DEPT와 해시조인,2.3초 select dname, sumsal from mydept1 d, (select deptno, sum(sal) sumsal from myemp1 group by deptno) e where e.deptno = d.deptno; -- 4.8초, 뷰 머징을 한다. select /*+ merge(e) */ dname, sumsal from mydept1 d, (select deptno, sum(sal) sumsal from myemp1 group by deptno) e where e.deptno = d.deptno;
  • 10. View Merging Example - 1 • -- 힌트없이 실행시 뷰 머징을 한다. 4.5초(뷰 머징을 하지않는 경우가 쿼리 성능이 뛰어남에도) • -- 인라인뷰를 먼저 실행하지 않고 MYSUGANG1 테이블의 PK인덱스로 드라이빙을 하고 • -- MYDEPT1과 머지조인 후 MYEMP1과 해시조인한다. select e1.ename, e1.dname from (select empno, ename, dname from myemp1 e, mydept1 d where e.sal > 1000000 ) e1, (select empno from mysugang1 where empno > 1000000 ) s where e1.empno = s.empno;
  • 11. View Merging Example - 2 -- ROWNUM을 사용하면 뷰 머징을 방지할 수 있다. 인라인뷰를 각각 실행 후 해시조인 -- 뷰 머징을 막아 쿼리 수행시간 단축 3.7초 select e1.ename, e1.dname from (select rownum, empno, ename, dname from myemp1 e, mydept1 d where e.sal > 1000000 ) e1, (select rownum, empno from mysugang1 where empno > 1000000 ) s where e1.empno = s.empno;
  • 12. View Merging Example - 3 -- 뷰 머징을 방지하기 위한 힌트 사용 -- 뷰 머징을 막아 쿼리 수행시간 단축 3.7초 select e1.ename, e1.dname from (select /*+ no_merge */ empno, ename, dname from myemp1 e, mydept1 d where e.sal > 1000000 ) e1, (select /*+ no_merge */ empno from mysugang1 where empno > 1000000 ) s where e1.empno = s.empno;
  • 13. View Merging Example - 4 -- 뷰 머징을 허라는 힌트 사용 select e1.ename, e1.dname from (select /*+ merge */ empno, ename, dname from myemp1 e, mydept1 d where e.sal > 1000000 ) e1, (select /*+ merge */ empno from mysugang1 where empno > 1000000 ) s where e1.empno = s.empno;
  • 14. This practice makes Expert! PL/SQL단기속성(1일완성)SQL힌트/튜닝(단기2일교육)SQL기초과정