사용자 도구

사이트 도구


study:oracle:datadb:3week_1:03

3.2.3. 연산방식에 따른 실행계획

  • 3.2.3.1. IN-List 탐침 실행계획
    1. BETWEEN = 선분 → RANG SCAN
    2. IN = 점 → EQUAL SCAN
    3. IN-LIST ITERATOR의 특징
      1. COL1 IN (1,2) AND COL2 =10 ⇒ ((COL1=1 AND COL2=10) OR COL1=2 AND COL2=10)
      2. 옵티마이져는 IN을 OR 형태로 변형하여 실행계획을 수립
      3. IN절에 비교값이 하나만 사용될 경우 INLIST ITERATOR 실행계획은 발생되지 않음
  • 3.2.3.2. 연쇄(Concatenation) 실행계획
    1. 연쇄(CONCATENATION)?
      1. ‘OR’가 처리주관 조건의 역할을 하는 경우
      2. ‘OR’로 연결된 서로 다른 컬럼을 사용한 조건을 별도의 실행단위로 분리
      3. 각각의 최적의 액세스 경로를 수립하여 CONCATENATION
      4. 그 외의 경우
      5. 단순 CHECK 조건으로 사용됨
    2. 연쇄(CONCATENATION) 적용하지 말아야 할 경우
      1. 조인의 연결고리가 ‘OR’ 조건을 가질 때 조인의 상대방이 넓은 처리범위를 가질 때
      2. 동일 컬럼의 ‘OR’ 조건 : 이때는 IN-List 탐침이 유리하기 때문이다.
      3. 보다 효율적으로 처리범위를 줄일 수 있는 다른 액세스 경로가 있을 때
      4. ‘OR’ 조건들 중에서 너무 넓은 처리범위를 가진 것들이 존재할 때
  • 3.2.3.3. 원격(Remote) 실행계획
    1. 원격실행계획?
      1. 데이터베이스 링크(DATABASE LINK)를 통한 액세스
      2. 물리적 : 다른 데이터베이스, 논리적 : 같은 데이터베이스로 인식
    2. 옵티마이져의 성향
      1. CBO상황에서 원격 테이블의 통계정보를 고려하여 로컬 테이블의 실행계획을 수립
      2. 원격 테이블의 실행계획을 생성하지는 않음
      3. 수행된 쿼리에 사용된 모든 테이블이 동일한 원격지의 테이블들이라면 전체 쿼리에 대한 결과만 리턴
      4. 실행계획 확인하는 습관이 원격실행계획에서는 반드시 필요함
  • 3.2.3.4. 정렬 처리(Sort Operation)
    1. SORT(UNIQUE)
      1. 해당 쿼리의 추출 로우에 대하여 유일한 집합을 생성하는 실행계획
        1. 서브쿼리의 제공자 역할일 경우 (단, 확인자 역할의 경우 FILTER 형태로 실행계획이 나타남)
        2. DISTINCT 문 사용
    2. SORT(AGGREGATE)
      1. GROUP BY를 하지 않은 상태에서, 전체 대상에 대해 그룹함수로 계산을 할 경우 발생
        1. SUM, COUNT, MIN, MAX, AVG
        2. 일반적인 정렬은 하지 않음
        3. MIN, MAX의 경우 최초 액세스 한 값과 이후 값을 비교하여 작거나/크면 갱신
    3. SORT(GROUP BY)
      1. 여러 개의 다른 그룹으로 AGGREGATE를 수행
      2. GROUP BY 문에 의해 발생
      3. 필수적으로 정렬 수행
      4. 그룹의 개수가 많을 수록 부하 증가
      5. SORT OPERATION – SORT (JOIN)
      6. SORT OPERATION – SORT (ORDER BY)
  • 3.2.3.5. 합집합 (Union, Union-All) 실행계획
    1. 서로 다른 쿼리에서 처리한 결과를 다시 모음
      1. 액세스의 복잡성 측면에서
        1. 한 곳에서 복잡하게 처리해야 할 것을 몇 개로 분리하여 수행하여 단순화 함
      2. UNION VS UNION ALL
        1. UNION : 최소 공배수 집합을 만들어야 함으로 SORT(UNIQUE) 수행이 필요
        2. UNION ALL : SORT(UNIQUE)가 필요 없음
        3. 중간 결과 집합을 고려하여 각 사용 유무를 결정
  • 3.2.3.6. 집합(Intersection) 실행계획
    1. 양쪽 집합 모두에 속하는 공통집합 (즉, 최대 공약수의 잡합)
    2. 각각의 집합에서 유일한 집합을 구해야함.
    3. Sort Merge Join과 유사한 방법을 사용하여 양쪽 집합을 유일하게 정렬한뒤 머지하고 있는것을 확인가능
  • 3.2.3.7. 차집합(Minus) 실행계획
    1. 어느 한쪽의 집합을 기준으로 다른 집합의 요소들을 제거
    2. 서브쿼리, 인라인뷰, DISTNCT등을 사용하여 동일한 결과 보장 가능
    3. SELECT-LIST에 나타난 모든 컬럼들의 유일집합을 만들기 위해 MERGE작업과 유사한 실행계획 출력
      1. SORT(UNIQUE)
      2. 단, 기본키 ‘=‘(EQUAL) 액세스는 SORT(UNIQUE)가 발생하지 않음
  • 3.2.3.8. COUNT(STOPKEY) 실행계획
    1. 조건절에 ROWNUM을 사용했을 경우 발생
    2. ROWNUM?
      1. 가상(PSEUDO) 컬럼 : 테이블에는 존재하지 않지만, DBMS가 제공한 컬럼
      2. SYSDATE, USER, ROWID, LEVEL(CONNECT BY 사용시)
study/oracle/datadb/3week_1/03.txt · 마지막으로 수정됨: 2010/05/19 16:11 저자 gwgwg