조인질문 0 6 1,471

by 초보뉴뷔 [Oracle 기초] 조인 join [2016.04.14 10:06:57]


조인을핳때

a=b

b=c

c=d

 

 

a=b

a=c

a=d

 

의 차이가먼지 궁금합니다

 

검색어도 애매해서 올려봅니다 

답변부탁드려요^^

by jkson [2016.04.14 10:41:37]

별 차이 없을 걸요. 어차피 전자처럼 쿼리를 만들더라도 옵티마이저 쿼리변환기에서 후자처럼 바뀔 수도 있는 거구요.


by 마농 [2016.04.14 10:52:00]

상수값에 대한 조건은 조건절 이행이라고 하는 쿼리 변환 과정을 거칠 수 있습니다.
(a=b & a=1) ==> (a=b & a=1 & b=1)
그러나 컬럼끼리의 조인 조건은 이행되지 않습니다.
(a=b & a=c) =(X)=> (a=b & a=c & b=c)
따라서 b=c 가 중요한 역할을 한다면 조건절에 따로 명시를 해줘야 합니다.

http://wiki.gurubee.net/pages/viewpage.action?pageId=26742349


by jkson [2016.04.14 10:53:41]

아 그렇군요. 저는 지금껏 동일하다 생각하고 있었는데 아닌가보네요;


by jkson [2016.04.14 11:14:33]

방금 테스트해보니 차이가 있군요~

a = b and a = c 와

a = b and b = c 로 해보니 실행계획에 차이가 있었고

a = b and a = c and a = 1 과

a = b and b = c and a = 1로 상수 조건 추가해서 비교 해봐도 실행계획에 차이가 나는군요.

지금껏 의미상 조인되는 순서에 따라 적어줬는데

제가 아마도 마농님께서 말씀하신 조건절 이행이라는 것을 듣고 제대로 이해를 하지 못했었나봐요.

좋은 정보 감사합니다~


by 마농 [2016.04.14 10:46:01]

테이블이 4(a,b,c,d)개인 경우 조인조건은 3개(4-1=3)면 충분합니다.
가능한 모든 조건의 경우의수는 총 6개인데
이중 3개만 선택하면 어떤걸 선택하든 그 의미는 동일하다고 볼 수 있습니다.
(a=b, a=c, a=d, b=c, b=d, c=d)


의미상으로는 동일하지만 실행계획상으로는 다를 수 있습니다.
조인 조건은 데이터를 찾아가는 길입니다.
(a=b, b=c, c=d) 의 경우 길은 (a-b-c-d) 의 형태입니다.
  a 에서 d 로 가려면 b 와 c 를 거쳐야만 갈 수 있습니다.
(a=b, a=c, a=d) 의 경우 길은 a 를 중심으로 b,c,d 로 갈라지는 구조입니다.
  b 에서 c 로 가려면 반드시 a 를 거쳐야만 하지요.


길을 찾아가는 방법에 따라 성능이 달라 질 수 있습니다.
따라서 효율적인 길을 뚤어 놓고 비효율적인 길은 폐쇄시키는게 좋은데요.
어느 길이 효율적인지 모를 때는 차라리 6개 길 모두 뚤어 놓는 것도 한 방법입니다.
다만 조건이 많아지면 쿼리가 지저분해지겠죠.


by 초보뉴뷔 [2016.04.14 13:48:42]

답변감사합니다.

또한번 깨달음을 얻네요 ^^

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