오라클 쿼리시 풀스캔현상 문의
코드테이블을 조인하면 풀스캔으로 실행계획이 나오고
해당 테이블을 스칼라 서브쿼리 형태로 사용하면 범위스캔이 됩니다.
왜 그런건가요?
이미지가 등록이 안되서 링크로 했습니다. 이상한 url아닙니다. ㅠ
미리 감사드려요
코드테이블 데이터건수는 대략 6천건 정도 됩니다.
그림1 -> 이미지가 눌러야 보이네요 ㅠ
그림2 -> 이미지가 눌러야 보이네요 ㅠ
1) 데이터 건수가 별로 없어서 HASH JOIN 으로 풀린거고요
옵티마이져에서는 풀스캔이 낫다고 판단한겁니다.
통계정보를 안돌리셨으면 돌려보시구요.
그래도 풀스캔이라면 옵티마이져 판단이라 생각하면 됩니다.
NL 로 유도하려면, 힌트쓰면 됩니다. /*+ ordered use_nl(A B) */
2) 스칼라 서브쿼리의 경우, 테이블 A 의 데이터를 먼저 처리한 후 그 결과를 B 테이블의 매칭 데이터와 건별로 처리되면서 일종의 상수처리화가 된 겁니다. 그래서 인덱스를 읽은 거라고 보면 됩니다.
데이터가 많은경우 rownum =1 을 안한다면, 상당한 비용이 있을 수 있습니다.
많은 경우, 조인으로 처리가 가능하다면, 스칼라 서브쿼리 보다는 조인으로 처리하는게 낫습니다.