고려사항3. JOIN LINK

 

*연결고리(Join Link)란 무엇인가?

-Where절에서 조인에 참여하는 각 테이블의 컬럼 간 다양한 연산자(=,<>,=, in...)로 연결되어 있는 부분을 연결고리라고 함

 

*연결고리 종류

-연결고리는 오로지'='만 존재하는 것이 아님

 

 

*연결고리 상태

-양쪽 정상

 。조인 오더에 상관없이 항상 인덱스를 사용

 。양쪽 연결고리가 정상일 경우 처리범위가 적은 테이블부터 드라이빙 되는 것이 유리

 

-한쪽 정상

 。논리적으로 연결고리가 비정상인 테이블(연결고리에 인덱스가 사용할 수 없는 테이블)에서 연결고리가 정상적인 테이블로의 조인오더는 양쪽 정상과 같이 문제가 되지 않음

 。단, 반대의 경우로 수행이 될 경우 성능상의 문제를 야기할 수 있음

 

-양쪽 이상

 。대부분 Nested Loops 조인 형태 보다는 Hash Join으로 풀리게 된느 경우가 대부분임

고려사항2. JOIN Order

 

*Driving Table

-드라이빙 테이블이란 두개의 테이블이 조인을 할 경우 먼저 처리 되는 테이블을 의미한다.

-WHERE절의 상수 조건에 가용할 수 있는 인덱스가 존재해야 함

 

*Driven Table

-두 개의 테이블이 조인을 할 경우 뒤에 처리되는 테이블을 의미한다.

-드라이빙 테이블로부터 상수값을 공급받아 처리됨

-연결고리를 통해 상수 값은 공급받게 됨

-따라서, 연결고리에 인덱스가 정상적으로 존재해야 함

-또는, 연결고리와 WHERE절의 상수조건을 포함한 인덱스가 존재해야 함

 

*최적화된 Join Order란?

-모든 연결고리가 정상상태일 경우 처리범위가 적은 쪽에서 부터 드라이빙 되도록 처리하는 것이 일반적으로 최적화된 조인 오더임

 

고려사항 1. JOIN Method

 

 

。SQL은 쉽다?

*'WHAT'만 필요할 뿐 'HOW'는 필요없다.

*배우기가 쉽다.

 -SELECT, FROM, WHERE

 -프로그램을 모르는 END-USER도 손쉽게 SQL을 작성할 수 있다.

*동일한 결과를 얻을 수 있는 방법은 수도 없이 많다.

 

SQL 어렵다?

*최적의 SQL을 작성하는 것은 쉽지 않다.

*SQL은 SELECT, FROM, WHERE절만 알아서 되는 것은 아니다.

*수행되는 과정을 정의할 수 없다.->성능을 담보할 수 없다.

*생각하지 않은 SQL을 성능을 보장 받을 수 없다!

 

그렇다면 어떻게 해야 최적의 SQL을 작성할 수 있을까?

 

 

 

 

 

 

 

 

 

+ Recent posts