본문 바로가기

SQL

CBO 의 최적화 절차 순서


■ CBO 의 최적화 절차 순서
    Parsing --> Query Transformation -->  Estimator  Plan Generation -->  RowSource --> Generation 

■ Optimizer 영향 요소
    SQL 문장형태
    인덱스, 테이블 구조
    통계정보
    옵티마이저 모드
    DBMS Version
    시스템 및 네트워크 상태
    사용컬럼, 연산자 형태
    힌트 사용


■ Optimizer 관련 파라미터 설정

    Cursor_Sharing  
      : SQL 조건절에 있는 상수값들을 변수로 전환시켜 파싱
    DB_FILE_MULTIBLOCK_READ_COUNT
      : Full Table Scan, Index Fast Full Scan 을 할 때 한번 I/O 에 읽을 블록수를 지정할 수 있고 기본값은 8
    OPTIMIZER_INDEX_CACHING
      : Nested Loops 조인이나 In-List 탐침등의 인덱스를 반복 액세스해서
        인덱스 블록들이 버퍼에 캐싱되어 있을 확율을 높임.
    OPTIMIZER_INDEX_COST_ADJ
      : 비용계산을 할 때 인덱스 액세스의 비중을 조정하는 역할
        100(기본값) 은 계산된 비용을 그대로 적용한다는 의미, 10 을 주었다면 1/10 로 계산한다는 의미.

■ Query Transformer (질의 변환기)
  => 질의 변환의 유형에는
        Inline View 나 View 의  Merging,
        조건절 진입 ( Predicate Pushing )
        서브쿼리의 비내포화 ( Subquery Unnesting),
        실체뷰( Materialized View) 의 질의 재생성( Rewrite),
        OR 조건의 전개 (Expansion) 등이 있다.                        
  ** 좌우를 이항해서 연산하지는 않는다.
      ex. sales_qty*12 > 1200  ==> sales_qty > 1200/12

■ View Merge 가 불가능한 경우 
    집합연산 ( UNION, UNION ALL, INTERSECT, MINUS)  이 View 쿼리 내에 존재할 때
    Connect By 와 같은 재귀 호출 SQL 일 때
    RowNum 을 사용한 경우


■■▶★ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ▒♬♪♩