기초부터다시, 조인

DB|2020. 8. 18. 19:55

Inner Join

'A' INNER JOIN 'B': A,B 교집합

 

Outer Join

'A' LEFT OUTER JOIN 'B' = A

'B' LEFT OUTER JOIN 'A' = B

'A' FULL OUTER JOIN 'B' = A, B 합집합(즉 순서 상관없음)

 

cross join

모든 경우의 수

ON절이 없음

A CROSS JOIN B

SELECT A.field, B.field FROM A, B

 

equal join

동일 값을 중심으로 조인

SELECT A.field, B.field FROM A,B WHERE A.field=B.field

 

Natural join

동일 컬럼을 내부적으로 모두 조인하여 ON 절 생략 가능

SELECT A.field FROM A NATURAL JOIN B

 

조인 연산중 Plan에서 만날수 있는 내부 동작 조인

 

Nested Loop Join

(어딘가에서는 NL Join이라고 불리기도..)

for내에 for 동작과 같음

for(A a : Atable){

  for(B b : Btable){

  }

}

결국 A데이터와 B 데이터가 많을수록 오래걸리는것은 당연하고

A의 값에서 B 값을 찾는데 인덱스가 없으면 코스트(cpu)가 급격히 올라가게 된다

 

 

Sort Merge Join

정렬후 찾는 방식, 연산이 =가 아닌경우 유리한 방식

두 테이블의 크기가 차이가 많이 나면, 소팅하느라 오래 걸리기 때문에 비효율적임

(select에 컬럼 내용 모두 소팅에 포함되어, select 컬럼을 줄이면 도움이 됨)

 

 

Hash Join

해싱 함수를 이용하여 조인 대상을 특정 지역에(partition)에 모아두어 해시값으로 테이블에 조인하는 방식

대용량 처리에 유리

 

 

이미지 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26744589

'DB' 카테고리의 다른 글

[DB] 기초부터다시, ACID, CAP  (0) 2020.09.14
GraphQL 끄적끄적  (0) 2020.08.20
[MongoDB] 해킹된 후 보안 설정 관련  (0) 2019.12.23
[MyBatis] MyBatis 문법 파서  (0) 2019.05.29
DB 스키마를 관리하자  (0) 2018.12.20

댓글()