UNNEST SUBQUERY
EXEM Knowledge Base
목차 |
[편집] 기본 정보
[편집] Parameter 정보
| Syntax | _UNNEST_SUBQUERY |
| 설정방법 |
|
| 버전 및 기본값 |
| 9iR2 | 10gR1 | 10gR2 | 11g |
|---|---|---|---|
| TRUE | TRUE | TRUE | TRUE |
[편집] 설명
_UNNEST_SUBQUERY 파라미터는 Subquery Unnesting여부를 결정한다. Subquery Unnesting이란 말 그대로 Subquery를 Unnest, 즉 쿼리안으로 풀어버리는 것을 의미한다.
[편집] 참고 사항
[편집] Subquery Unnesting의 적용 예
Subquery Unnesting의 적용 예는 아래와 같다.
-- Subquery를 사용하는 쿼리 SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers); -- Subquery Unnesting에 의해 변환된 쿼리. Subquery가 쿼리 본문안으로 풀어졌음을 알 수 있다. SELECT orders.* FROM orders, customers WHERE orders.customer_id = customers.customer_id;
[편집] 잘못된 Subquery Unnesting에 의한 성능 저하
Subquery Unnesting은 대단히 바람직한 기능이며, 일반적으로 성능을 개선시키는 효과가 있다. 하지만 특정 쿼리에서, 특히 복잡한 쿼리에서는 오히려 잘못된 실행 계획을 만드는 역효과를 가지고 있다. 이 경우에는 Subquery Unnesting을 비활성화함으로써 문제를 해결할 수 있다. 다음과 같은 방법으로 비활성화할 수 있다.
-- _UNNEST_SUBQUERY 파라미터를 False로 변경한다. ALTER SESSION SET "_UNNEST_SUBQUERY" = FALSE; SELECT * FROM (SELECT ... FROM b) x WHERE a = '100'; -- NO_UNNEST 힌트를 사용한다. SELECT * FROM (SELECT /*+ NO_UNNEST */ FROM b) x WHERE a = '100';
[편집] 관련된 정보
- NO_UNNEST 힌트
- _COMPLEX_VIEW_MERGING 파라미터
- _OPTIMIZER_COST_BASED_TRANSFORMATION 파라미터
- _PUSH_JOIN_PREDICATE 파라미터