[Oracle] DB 튜닝, Join, 옵티마이져 Hint 힌트

동민·2021년 5월 12일
0
post-custom-banner

Driving Table (드라이빙 테이블)

: 조인으로 연결되는 테이블 중 첫번째로 액세스 되는 테이블을 말한다.

  • 일반적으로 드라이빙 테이블은 가장 적은 레코드로 구성된 테이블일 때 쿼리 성능 좋다.
  • 드라이빙 테이블의 확인은 Oracle 실행 계획 (Explain Plan)을 실행해야 확인할 수 있다.

Oracle SQL Developer Explain Paln 실행 계획

https://velog.io/@kmdngmn/Oracle-SQL-Developer-Explain-Paln-%EC%8B%A4%ED%96%89-%EA%B3%84%ED%9A%8D


JOIN 조인

Nested Loop Join (NL 조인)

: 두개 이상의 테이블에서 하나의 테이블을 기준으로 순차적으로 상대방 테이블의 ROW를 결합하여 원하는 결과를 추출하는 테이블 조인 방식

  • 결합되기 위한 기준이 되는 테이블을 Driving Table 드라이빙 테이블 또는 Outer 테이블이라 한다.
  • 결합되는 테이블을 Driven Table 드리븐 테이블 또는 Inner 테이블이라 한다.
/* NL 조인은 아래 JAVA 코드 원리와 같다.*/
for(int i = 1; i <= 100; i++)	// outer loop
	for(int j = 1; j <= 100; j++) // inner loop
    		...
  • NL 조인은 랜덤 엑세스에 의하여 접근하기 때문에 집합이 많다면 수행 속도가 저하된다.
    따라서 레코드가 적은 테이블을 드라이빙 테이블로 활용하거나 WHERE 조건절을 사용하여 적절히 결과 집합을 만들어야 한다.

  • 연결이 되는 테이블인 driven 테이블에는 조인을 위한 적절한 인덱스가 생성되어 있어야 한다.
    인덱스가 없는 상태에서 NL조인이 수행된다면 수행 속도가 저하될 수 있어 이러한 경우 옵티마이저의 모드에 따라 Sort Merge Join, Hash Join을 수행하게 된다.

Sort Merge Join

: 조인의 대상범위가 넓을 때 발생하는 Random Access를 줄이거나 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방식

  • 양쪽 테이블의 처리범위를 Access하여 정렬한 결과를 차례로 Scan하면서 연결고리의 조건으로 Merge한다.

Hash Join

: Sort-Merge Join은 정렬 과정에서 부하가 발생할 수 있기에 Sort 대신 해쉬값을 사용하는 조인이다.


옵티마이져 Hint 힌트

Hint 힌트:

오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한 데이터를 스캐닝하는 경로, 조인하는 방법 등을 알려주기 위해 SQL사용자가 SQL 구문에 작성하는 것을 뜻함.
오라클이 항상 최적의 실행 경로를 만들어 내기는 불가능하기 때문에 직접 최적의 실행 경로를 작성해 주는 것

힌트 사용법

SELECT /*+ FIRST_ROWS */ [컬럼] 
FROM [테이블]
WHERE [조건]

/* 바로 뒤에 +가 붙는다는 점에서 주석과 다르다

참고

https://devuna.tistory.com/35

profile
BE Developer
post-custom-banner

0개의 댓글