조인시 * 로인한 실행계획 변경이유 질문 0 1 1,418

by 케를로스 [Oracle 기초] [2018.04.18 22:26:34]


안녕하세요 요즘 DB 공부가 부족해서 DB공부중인데요

계약테이블 A 와 회사테이블 B이 있는데요

두테이블 사이에 comp_cd 라는 코드가 있습니다. 당연히 b테이블의 PK이고 인덱스도 생성되어있습니다.

그런데

 select * 
   from 계약테이블 a
      , 회사테이블 b
  where a.comp_cd = b.comp_cd
    and a.계약기간 between  '20180101' and '20180401'

인 경우 a테이블이 드라이빙 테이블이 되지 못하는것인지 힌트를 주어도 인덱스를 타지못해서

b테이블을 풀테이블 스캔을 하고있습니다.

반대로

 select a.계약기간, a.계약명, b.회사명
   from 계약테이블 a
      , 회사테이블 b
  where a.comp_cd = b.comp_cd
    and a.계약기간 between  '20180101' and '20180401'

로 쿼리를 변경하였을때에는 a테이블이 드라이빙 테이블이 되어서

b테이블을 인덱스를 타게되는데

 

* 가 무슨역할을 하는것이길레 조회시 실행계획을 변경시키는것인지 질문드립니다.

 

긴글 읽어주셔서 감사합니다.

by 마농 [2018.04.19 10:35:44]

조회 항목에 따라 실행계획 바뀔 수 있습니다.

꼭 필요한 항목만 적는것이 좋습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입