ORACLE Tip2008. 11. 13. 11:02
1. NESTED LOOPS

     Rows   Execution Plan
    ------- -----------------------------------------------------
④    7701   NESTED LOOPS
① 148946     TABLE ACCESS (FULL) OF 'ITEM_BASE'
③    7719     TABLE ACCESS (BY INDEX ROWID) OF 'CS_SPEC'
②    7724       INDEX (UNIQUE SCAN) OF 'PK_CS_SPEC'

① 'ITEM_BASE'를 전체테이블 스캔으로 액세스한 로우 수는 148946건.
    이중에서 조건절을 통과한 로우수는 7724건. 
    ②에서 'PK_CS_SPEC'인덱스에 연결을 시도한 회수를 보고 알아낼수 있다.
② 선행 테이블의 조건을 통과한 7724건이 'CS_SPEC' 테이블의 기본키를 이용하여 연결을 시도 
    그중에서 5건을 실패 이것은 ③에 나타난 7719 라는 숫자를 보고 알수 있다.
    그 이유는 인덱스를 성공적으로 액세스한 것만 테이블을 액세스하러 갔기 때문이다.
③ 기본키의 ROWID로 테이블을 액세스 하였다.
    그런데 나중에 수행된 'CS_SPEC'테이블에도 체크조건이 있음을 짐작할 수 있다.
    그 이유는 ④에 나타난 숫자인 7701을 보면 체크조건에 의해 18건이 걸러졌음을 짐작할 수 있다.
④ 조인의 최종 결과가 7701건임을 의미한다.

 
2. OUTER JOIN  

     Rows   Execution Plan
    ------- -----------------------------------------------------
④      280  NESTED LOOPS (OUTER)
②    74861   TABLE ACCESS (BY INDEX ROWID) OF 'BAL_ITEM'
①  210991      INDEX (RANGE SCAN) OF 'PK_BAL_ITEM' (UNIQUE)
③   53200    TABLE ACCESS (FULL) OF 'TPF_INFO'

① 'BAL_ITEM' 테이블의 기본키를 범위처리로 스캔하면서 인덱스에 있는 ROWID로 테이블을 엑세스한다.
     이렇게 스캔한것은 총 210991 건이지만 실제로 테이블을 액세스한 것은 74861건이다. 
     그 이유는 최소 두 개 이상의 컬럼에 조건이 부여되었지만 이들이 결합 인덱스로 구성된 기본키에서 연속된 순서를
     가지고 있지 않다는 것을 나타낸다.
②  이 테이블을 액세스한 74861건 중에서 체크조건에 의해서 다시 걸러지고 남은건은 280건이다.
     연결고리에 인덱스가 없기 때문에 연결대상마다 매번 전체테이블 스캔을 하였다.
     이 조인은 아우터 조인이기 때문에 설사 연결에 실패했더라도 조인은 언제나 성공이므로 조인결과 집합인 280과 동일하다.
③  이 테이블을 스캔한 로우수는 53200이지만 이테이블과의 연결을 시도한 횟수는 280이다.
     즉, 테이블의 총 로우수는 190 (53200/280) 건이다.
④  연결을 시도한 280건이 아우터 조인에 의해서 모두 성공하게 되므로 최종결과는 280건이다.

출처 : 새로쓴 대용량 데이터베이스 솔루션 vol.1
Posted by 항아리고미