행위

튜닝 쿼리 변형

DB CAFE

Dbcafe (토론 | 기여)님의 2022년 2월 8일 (화) 17:30 판 (서브쿼리 Unnesting)
thumb_up 추천메뉴 바로가기


1 쿼리 변환 종류[편집]

  1. 10g부터는 서브쿼리 Unnesting과 뷰 Merging이 비용기반 쿼리 변환으로 전환됨
  2. 조건절 Pushing 중 조인 조건 pushdown도 비용기반 쿼리 변화으로 전환
  3. 나머지는 변환된 쿼리가 항상 더 나은 성능을 제공하므로 비용기반으로 전환이 불필요

1.1 서브쿼리 Unnesting[편집]

  1. 옵티마이져가 동일한 결과를 보장하는 조인문으로 변환하고 나서 최적화 하는것 이를 '서브쿼리 Unnesting' 이라고 함.
  2. 서브쿼리를 메인쿼리와 같은 레벨로 풀어 내서 다양한 엑세스 경로와 조인 메소드를 평가 할수 있음.
  3. 옵티마이저는 조인 형태로 변환했을때 더 나은 실행계획을 찾을 가능성이 높다
  4. 변환된 쿼리의 예상 비용이 더 낮을 때만 Unnesting된 버전을 사용, 그렇지 않을 때는 원본 쿼리 그대로 필터 방식으로 최적화 한다.

1.1.1 unnest 힌트[편집]

서브쿼리를 Unnesting 함을써 조인방식으로 최적화하도록 유도.

1.1.2 no_unnesting 힌트[편집]

서브쿼리를 그대로 둔 상태에서 필터 방식으로 최적화 하도록 유도.

1.2 뷰 Merging[편집]

1.3 조건절 Pushing[편집]

1.4 조건절 이행[편집]

1.5 공통 표현식 제거[편집]

1.6 outer 조인을 Inner 조인으로 변환[편집]

1.7 실체화 뷰 쿼리로 재작성[편집]

1.8 star 변환[편집]

1.9 outer 조인 뷰에 대한 조인 조건 Pushdown[편집]

1.10 or-expansion[편집]

2 쿼리 변환 두 가지 방식[편집]

2.1 휴리스틱 쿼리 변환[편집]

 : 결과만 보장된다면 무조건 쿼리 변환을 수행 

2.2 비용기반 쿼리 변환[편집]

 : 변환된 쿼리의 비용이 더 낮을 때만 그것을 사용하고, 그렇지 않을 때는 원본 쿼리 그대로 두고 최적화를 수행한다.