COMPLEX VIEW MERGING

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] 기본 정보

[편집] Parameter 정보


Syntax _COMPLEX_VIEW_MERGING
설정방법
  • Parameter File
  • ALTER SYSTEM SET "_COMPLEX_VIEW_MERGING" = TRUE|FALSE
  • ALTER SESSION SET "_COMPLEX_VIEW_MERGING" = TRUE|FALSE
버전 및 기본값
9iR2 10gR1 10gR2 11g
TRUE TRUE TRUE TRUE



[편집] 설명

Complex View란 GROUP BY나 DISTINCT 구문을 포함하는 복잡한 뷰를 의미한다. Complex View는 Simple View에 비해 Merge가 까다롭다. Complex View Merging이란 Complex View를 Query의 본문 안으로 Merge하는 기능을 말한다. _COMPLEX_VIEW_MERGING 파라미터를 이용해 Complex View Merging을 사용할 지의 여부를 결정한다.

Oracle 8i에서 처음으로 Complex View Merging 기능이 소개되었으며, 기본값은 False였다. 9i부터는 기본값이 True이다.

[편집] 참고 사항

[편집] Complex View Merging의 적용 예

Complex View Merging의 적용 예는 아래와 같다.

-- Complex View. GROUP BY 절이 사용됨
CREATE VIEW avg_salary_view AS 
 SELECT department_id, AVG(salary) AS avg_sal_dept, 
   FROM employees 
   GROUP BY department_id;

-- Complex View를 액세스하는 쿼리
SELECT departments.location_id, avg_sal_dept 
 FROM departments, avg_salary_view 
 WHERE departments.department_id = avg_salary_view.department_id 
   AND departments.location_id = 2400; 

-- 위의 쿼리는 아래와 같이 변환된다. Complex View Merging이 동작한 것을 확인할 수 있다.
SELECT departments.loc, AVG(salary) 
 FROM departments, employees 
 WHERE departments.department_id = employees.department_id 
   AND departments.location_id = 2400 
 GROUP BY departments.rowid, departments.location_id; 


[편집] 잘못된 Complex View Merging에 의한 성능 저하

Complex View Merging은 대단히 바람직한 기능이며, 일반적으로 성능을 개선시키는 효과가 있다. 하지만 특정 쿼리에서, 특히 복잡한 쿼리에서는 오히려 잘못된 실행 계획을 만드는 역효과를 가지고 있다. 이 경우에는 Complex View Merging을 비활성화함으로써 문제를 해결할 수 있다. 다음과 같은 방법으로 비활성화할 수 있다.

-- _COMPLEX_VIEW_MERGING 파라미터를 False로 변경한다.
ALTER SESSION SET "_COMPLEX_VIEW_MERGING" = FALSE;
SELECT * FROM complex_view v1 WHERE a = '100';

-- NO_MERGE 힌트를 사용한다. 
SELECT /*+ NO_MERGE(v1) */ * FROM complex_view v1 WHERE a = '100';


[편집] 관련된 정보

  1. NO_MERGE 힌트
  2. _OPTIMIZER_COST_BASED_TRANSFORMATION 파라미터
  3. _PUSH_JOIN_PREDICATE 파라미터
  4. _SIMPLE_VIEW_MERGING 파라미터


[편집] 외부 참조

  1. http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96533/opt_ops.htm#1005784
  2. http://www.psoug.org/reference/hints.html