어느 가을날의 전환점

ORACLE|실행계획(Explain Plan) 보는 방법 본문

Database/Oracle

ORACLE|실행계획(Explain Plan) 보는 방법

어느가을빛 2010. 12. 24. 13:51
Access Type
   - NESTED LOOPS: 맨 안쪽부터 바깥 쪽으로, 그리고 위에서부터 아래쪽으로 건별 순차적 액세스.
   - MERGE JOIN: 두 테이블을 읽어 sort한 후 서로 값을 비교해 나가는 방식
   - HASH JOIN: 데이터를 읽되 내부적으로 hash function을 이용하여 정렬한 후 이를 통해 join해나가는 방식.

AND-EQUAL 단일 컬럼 인덱스에 대한 access 시 사용하며, 인덱스merge 를 통해 rowid 별로 중복을 제거 한다.
CONNECT BY CONNECT BY 절에 의해 순차적인 결과값을 보여준다.
CONCATENATION 여러 결과 집합을 union-all 하여 하나의 집합으로 돌려준다.
COUNT 조건에 맞는 집합 내의 row건수를 돌려 준다.
STOPKEY ROWNUM 에 의해 where 절에서 건수를 세서 중지시킨다.
FILTER 여러 조건에 의해 결과집합을 걸러서 돌려 준다.
FIRST ROW Query 에 의해 선택된 row 중 처음 row 만 돌려 준다.
FOR UPDATE FOR UPDATE 절에 의해 선택되고 update 를 위해 lock 이 걸려있을 때
HASH JOIN + DSS 나 Batch 에서 다량의 데이터에 대해 사용할 때 유용하다.
CBO 는 메모리상에서 join key 를 이용해 hash 테이블을 생성하고 이를 통해 각 테이블에 access 한다.
ANTI Hash anti-join.
SEMI Hash semi-join.
INDEX *
UNIQUE SCAN Unique-index 를 통해 테이블의 row 에 access 한다.
RANGE SCAN Non-unique index 를 통하거나 unique index 의 특정 범위에 대한 테이블의 row 에 access 할 때
FULL SCAN 인덱스에 대해서 full scan 하여 결과값을 보여준다.
FAST FULL SCAN 인덱스를 multiblock 을 읽어 결과값을 보여준다. CBO 에서만 사용 가능하다.
SKIP SCAN 결합인덱스에서 선행 컬럼을 건너뛰고 scan 하여 결과값을 보여준다. CBO 에서만 사용 가능하다.
INTERSECTION 교집합 추출. 중복값 없음.
MERGE JOIN + 먼저 자신의 조건만으로 액세스한 후 각각을 소트하여 merge 해 가는 조인.
OUTER Merge join 에 outer join 이 지정된 경우
ANTI Merge anti-join.
SEMI Merge semi-join.
CARTESIAN 각 결과 집합을 이용해 Cartesian product 생성
MINUS Operation accepting two sets of rows and returning rows appearing in the first set 
but not in the second, eliminating duplicates.
NESTED LOOPS + 먼저 어떤 DRIVING 테이블의 ROW를 ACCESS한 후 그 결과를 이용해 다른 테이블을 연결하는 조인
OUTER 위와 동일한 방법으로 OUTER JOIN을 한다.
REMOTE 분산 DATABASE 에 있는 객체를 추출하기 위해 DATABASE LINK를 사용하는 경우.
SORT
AGGREGATE 그룹함수(SUM, COUNT 등)를 사용하여 하나의 ROW를 추출
UNIQUE 같은 ROW를 제거하기 위한 소트
GROUP BY 액세스 결과를 GROUP BY하기 위한 소트
JOIN MERGE JOIN을 하기 위한 소트
ORDER BY ORDER BY를 위한 소트
TABLE ACCESS *
FULL 테이블의 전체 row 에 대해 access 한다.
CLUSTER Indexed cluster key 를 통해 테이블의 row에 access 한다.
HASH Hash cluster key 를 통해 테이블의 row에 access 한다.
BY ROWID RANGE Rowid 의 범위에 의해 테이블의 row에 access 한다.
BY USER ROWID 사용자가 지정한 rowid 를 통해 테이블의 row에 access 한다.
BY INDEX ROWID Partition 되지 않은 index 를 통해 테이블의 row에 access 한다.
BY GLOBAL INDEX ROWID Partition 된 테이블에 대해 global index 를 통해 테이블의 row에 access 한다.
BY LOCAL INDEX ROWID Partition 된 테이블에 대해 local index 를 통해 테이블의 row에 access 한다.
UNION 중복 없는 합집합을 구한다. 항상 전체 범위 처리
VIEW 어떤 처리에 의해 생성되는 뷰에서 추출한다.
Comments