(오라클) hash join과 NL join 차이 질문 0 3 888

by 피에로 [Oracle 기초] [2019.05.23 02:36:46]


안녕하세요.

나름대로 찾아봤는데 답을 얻지 못해 질문드립니다.

A테이블의

varchar2 타입의 a컬럼과

B테이블의

number타입의 b컬럼을가지고

select A.*

    from A A

inner join B B

      on A.a =B.b

와 같은 조인문이 있을때

select 절에 A.a만 조회하면 

Hash join을 수행하며

조회가되는데

 

select 절에 A.* 을 조회하면

nested loop join을 수행하며

에러가 발생합니다.

테이블A의 a 컬럼에는

문자형 숫자도 있고

문자형 문자도 있어

hash join시에도 오류가 날것이라 생각했는데 정상수행이 되는 이유가 궁금합니다.

제가 추측하기로는

hash join을 위해 A테이블이나 B테이블중

데이터량이 적은 테이블을 해싱처리하면서

해시테이블을 만들면서 해시테이블에 저장되는 값.

즉, a컬럼이나 b 컬럼의

데이터 형이 뭔가 달라지는건가 싶기도 한데 그부분이 이해가 가지않습니다.

도움을 요청드립니다.

감사합니다.

by 마농 [2019.05.23 08:36:57]

일부만 출력된게 아닐까요?
전체 스크롤 내리다 보면 에러 날 듯.


by 피에로 [2019.05.23 09:49:14]

hash join시

어떤 테이블을 먼저 보느냐에 따라

형변환이 달라지는것 같습니다.

plan상에서

A테이블을 먼저보는 경우는

varchar2인 a 컬럼을 기준으로

B테이블의 number 인 b컬럼을

문자로 형변환시키기에 오류가 나지 않는 것 같고.

B테이블을 먼저보는 경우는

number인 b컬럼을 기준으로

A테이블의 varchar2인 a컬럼을

숫자로 형변환시키기에 오류가 나는 것으로 판단됩니다.

그냥 제 생각이긴 한데 가능성이 있지 않은가요?

답변 주셔서 감사합니다!!!


by 마농 [2019.05.23 15:31:27]

문자와 숫자를 비교하면 문자가 숫자로 변환되는 것은
조인의 순서와는 상관 없는 규칙인 것으로 알고 있습니다.

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