오라클/오라클 튜닝14 해시조인 해시조인 소트 머지 조인과 해시 조인은 조인 과정에 인덱스를 이용하지 않기 때문에 대량 데이터 조인할 때 NL조인보다 훨씬 빠르고, 일정한 성능을 보인다. NL 조인에 사용하는 인덱스는 영구적으로 유지하면서 다양한 쿼리를 위해 공유 및 재사용하는 자료구조다. 반면, 해시 테이블은 단 하나의 쿼리를 위해 생성하고 조인이 끝나면 곧바로 소멸하는 자료구조다. 결론적으로 해시조인은 다음 3가지 기준을 만족할 때 사용한다 (NL보다 조금 빠르다면 NL을 사용하라) 1. 수행 빈도가 낮고 2. 쿼리 수행 시간이 오래 걸리는 3. 대량 데이터 조인할 때 기본 메커니즘 1. Build 단계 : 작은 쪽 테이블을 읽어 해시 테이블을 생성한다. 조인 컬럼을 해시 테이블 키 값으로 사용한다. 해시 테이블은 PGA 영역에 할.. 2021. 12. 11. 소트 머지 조인 소트 머지 조인 조인 컬럼에 인덱스가 없을 때, 대량 데이터 조인이어서 인덱스가 효과적이지 않을 때, 옵티마이저는 NL 조인 대신 소트 머지 조인이나 해시 조인을 선택한다. 해시 조인의 등장으로 소트 머지 조인의 쓰임새가 예전만 못하지만, 해시 조인을 사용할 수 없는 상황에서 대량 데이터를 조인하고자 할 때 여전히 유용하다. 힌트 : use_merge(innerTable) 기본 메커니즘 1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다. 2. 머지 단계 : 정렬한 양쪽 집합을 서로 머지한다. 1. PGA의 Sort Area영역에 조건의 결과 Outer Table을 조인컬럼 순으로 정렬한다. PGA에 담을 수 없을 정도로 크면 Temp 테이블스페이스에 저장한다. 2. PGA의 Sort Area영.. 2021. 12. 11. NL조인 NL조인 NL조인 NL(Nested Loop)의 수행구조는 중첩 루프 수행 구조와 동일하다. (for문 안의 for문) 일반적으로 NL 조인은 Outer와 Inner 양쪽 테이블 모두 인덱스를 이용한다. Outer쪽 테이블은 사이즈가 크지 않으면 인덱스를 이용하지 않을 수 있다. 반면 Inner쪽 테이블은 인덱스를 사용해야 한다. 실행계획 위쪽 테이블 기준으로 아래쪽 고객 테이블과 NL 조인을 한다. NL조인 힌트는 /*+USE_NL(inner_table) USE_NL(inner_table2) USE_HASH(table3)*/ USE_NL(A, B, C, D)로 작성하면 네 개 테이블을 NL 방식으로 조인하되 순서는 옵티마이저가 스스로 정하도록 맡긴것이다. 앞에 LEADING(A, B, C, D)를 두면.. 2021. 12. 11. 인덱스 튜닝 인덱스 튜닝 테이블 액세스 최소화 SQL 튜닝은 랜덤 I/O와의 전쟁이다. 인덱스 ROWID는 논리적 주소다. 디스크 상에서 테이블 레코드를 찾아가기 위한 위치 정보를 담는다. 인덱스 ROWID는 우편주소이고 우체부 아저씨가 일일이 찾아다니는 구조이다. 메모리DB의 경우는 전화통신 구조이다. 인덱스 손익분기점 1. Table Full Scan은 시퀀셜 액세스인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 랜덤 액세스 방식이다. 2. Table Full Scan은 Multiblock I/O인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 Sigle Block I/O 방식이다. Table Full Scan은 성능이 일정하다. 1000만건중 한 건을 조회하든, 10만건을 조회하든 차이가 거의 없다. .. 2021. 12. 5. 이전 1 2 3 4 다음