2018년 12월 23일 일요일

(오라클교육)(오라클힌트교육,SQL튜닝)오라클힌트를 이용한 쿼리 튜닝, 중첩루프조인유도힌트, oracle hint/ordered/use nl/ordered



(오라클힌트교육,SQL튜닝)오라클힌트를 이용한 쿼리 튜닝, 중첩루프조인유도힌트, oracle hint/ordered/use nl/ordered 


Hints for Join Orders(USE_NL)
n  USE_NL 힌트는 테이블을 조인 하는 경우 중첩 루프 조인(Nested Loop Join)이 일어나도록 하는 힌트 문장이다.  중첩 루프 조인은 중첩반복 이라고도 하는데 하나의 테이블(outer/driving table)에서 추출된 ROW를 가지고 일일이 다른 테이블(inner/probed table)을 반복해서 조회하여 찾아지는 레코드를 최종 데이터로 간주하는 방법 이다.
n  EMP 테이블과 DEPT 테이블을 조인하는 경우 DEPT 테이블이 건수가 작다면 우선 이 테이블을 외부 루프로 해서 하나씩 읽으면서 이에 대응하는 EMP 테이블의 데이터를 추출 하는 경우가 중첩 루프 조인에 해당 한다이때 EMP 테이블의 경우 대부분 조인 칼럼에 인덱스를 이용하는 것이 성능상 좋다즉 중첩 루프 조인은 테이블 중 적어도 하나의 조인 컬럼에 대해 인덱스(or Hash Index)가 존재할 때 연관되는 방식으로 이 중첩 루프 조인에서 테이블 중 하나의 테이블 또는 중간 결과 셋을 대상으로 FULL SCAN이 일어나게 된다.
n  보통 USE_NL 힌트 구문은 ORDERED 힌트 구문과 같이 사용되는데 USE_NL이 취하는 인자는 FROM절에서 두 번째 나오는 테이블(비드라이빙 테이블, inner/probed table)을 명시해 주어야 한다인수로 사용되지 않은 첫 번째 테이블이 드라이빙 테이블(outer table)이 된다.

Hints for Join Orders(ORDERED)
n  힌트는 FROM 뒤에 기술되는 테이블의 순서대로 조인이 일어나도록 해주는 구문이며 대부분 단독으로는 사용되지 않고 USE_NL(중첩 루프 조인을 유도), USE_MERGE(머지 소트 조인을 유도), USE_HASH(HASH 조인을 유도)등과 같이 사용된다.
n  USE_NL/USE_MERGE/USE_HASH등의 인자로 사용되는 테이블은 FROM절에서 두 번째로 나타나는 테이블 이어야 하는데 FROM절에서 처음 나타나는 테이블이 드라이빙 테이블(OUTER/DRIVING TABLE)이 되고 나중에 나타나는 테이블이 PROBED TABLE(INNER TABLE)이 된다보통 드라이빙 테이블의 경우 데이터 건수가 적거나 조인 칼럼에 대해 인덱스가 없는 테이블이 주로 사용된다.
n  중첩 루프 조인(Nested Loop Join)이나 해시조인(Hash Join)의 경우 성능이 FROM절 뒤에 나타나는 테이블의 순서에 영향을 받지만 MERGE 조인은 영향을 받지 않는다머지 조인은 메모리에 올려서 정렬 시킨 후 병합하니까 실행 계획은 다르게 나올지 모르지만 성능에는 관계 없다.



댓글 없음:

댓글 쓰기