Q & A

플렌에 대하여 설명좀 부탁드립니다~~~~

Date2005.09.08 / Hit : 9317
-------------------------------------------------------- * Orange for Oralce Version(ex. 3.0.6) : * Oracle Client (SQL*Net) Version : 9i * Oracle Server Version : 9i * Client OS : WIN XP -------------------------------------------------------- 지점상품 테이블의 pk는 지점 + 상품 >>>>> SQL1. <<<<< select /*+index(a RSERV_PRC_CHG_I2) index(b STR_PROD_PK)*/ a.지점, a.상품 , b.업체 from 가격예약 a, 지점상품 b where a.지점 = b.지점 and a.상품 = b.상품 and a.예약일 = to_char(to_date(:sdate,'yyyymmdd') +1,'yyyymmdd') and a.확정구분 = '1' ----> and b.거래형태= '2' ; Optimizer goal: CHOOSE Rows Row Source Operation ------- --------------------------------------------------- 0 STATEMENT 2861 TABLE ACCESS BY LOCAL INDEX ROWID STR_PROD 23237 NESTED LOOPS 11618 TABLE ACCESS BY INDEX ROWID RSERV_PRC_CHG 11618 INDEX RANGE SCAN OF RSERV_PRC_CHG_I2 (NONUNIQUE) 11618 PARTITION LIST ITERATOR PARTITION: 11618 INDEX RANGE SCAN PARTITION: OF STR_PROD_PK (UNIQUE) >>>>> SQL2. <<<<< select /*+index(a RSERV_PRC_CHG_I2) index(b STR_PROD_PK)*/ a.지점, a.상품 , b.업체 from 가격예약 a, 지점상품 b where a.지점 = b.지점 and a.상품 = b.상품 and a.예약일 = to_char(to_date(:sdate,'yyyymmdd') +1,'yyyymmdd') and a.확정구분 = '1'; Optimizer goal: CHOOSE Rows Row Source Operation ------- --------------------------------------------------- 0 STATEMENT 11618 NESTED LOOPS 11618 TABLE ACCESS BY INDEX ROWID RSERV_PRC_CHG 11618 INDEX RANGE SCAN OF RSERV_PRC_CHG_I2 (NONUNIQUE) 11618 PARTITION LIST ITERATOR PARTITION: 11618 TABLE ACCESS BY LOCAL INDEX ROWID STR_PROD PARTITION: 11618 INDEX UNIQUE SCAN PARTITION: OF STR_PROD_PK (UNIQUE) ============================ 의문점===================== SQL1과 SQL2의 trace 결과를 보면 NESTED LOOPS의 rows를 보면 23237과 11618로 2배+1건의 차이가 납니다. SQL1과 SQL2의 차이는 WHERE절에 check 조건인 and b.trd_typ_fg = '2' 있느냐, 없느냐 인데, 왜 NESTED LOOP JOIN결과가 11618이 아니고 23237로 나오는지? 생각으로는 23237건이 아니고, 11618이 나오고 check 조건에 걸러져서 2861건이 나와야 하는 것 같은데. 23237이 의미하는 것이 무엇인지요?
  • 대표전화
    1660-1675

  • 기술 문의
    02-6931-1734

  • 오렌지 문의
    070-8666-8175

  • 라이선스 문의
    02-6931-1728