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


