일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- miplatform
- 오라클
- Excel
- Report Designer
- oracle
- Book
- 톰캣
- JEUS
- 튜닝
- Tomcat
- 자바
- DB
- 에러
- 오류
- 엑셀
- 성능
- JavaScript
- 마이플랫폼
- error
- 도서
- 데이터베이스
- 기타소득
- 한글
- 태그를 입력해 주세요.
- 이클립스
- Eclipse
- MIP
- java
- 함수
- 회계
Archives
- Today
- Total
어느 가을날의 전환점
ORACLE|조인(Join) - Nested Loops, Sort Merge, Hash 본문
Nested Loops Join (NL 조인)
- 각 단계를 완료하고 나서 다음단계로 넘어가는게 아니라 한 레코드씩 순차적으로 진행한다.
- 단, order by는 전체집합을 대상으로 정렬해야 하므로 작업을 모두 완료한 후 다음 오퍼레이션을 진행한다.
- 다른 조인방식보다 인덱스 구성 전략이 특히 중요하며, 소량의 데이터를 처리하거나 부분범위 처리가 가능한 OLTP성 환경에 적합한 조인방식이다.
Sort Merge Join (소트 머지 조인)
- 두 테이블을 각각 정렬한 다음에 두 집합을 머지(Merge)하면서 조인을 수행한다
- 소트단계:양쪽 집합을 조인 컬럼 기준으로 정렬
- 머지단계:정렬된 양쪽 집합을 서로 Merge
- 소트머지 조인은 Outer루프와 Inner루프가 Sort Area에 미리 정렬해둔 자료구조를 이용할분 실제 조인오퍼레이션은 NL조인과 동일 하지만 Sort Area가 PGA영역에 할당되므로 래치획득과정이 없으므로 SGA를 경유하는 것보다 훨씬 빠름
- PGA영역에 저당된 데이터를 이용하므로 빠르므로 소트부하만 감수하면 NL조인보다 유리
- 인덱스유무에 영향을 받지 않음.
- 스캔위주의 액세스방식을 이용
(단, 양쪽 소스 집합에서 정렬 대상 레코드를 찾는 작업은 인덱스를 이용해 Random엑세스 방식으로 처리, 이때 액세스량이 많다면, 소트머지 이점이 사라질수 있음) - 대부분 해시조인인 보다 느린 성능을 보이나, 아래와 같은 상황에서는 소트머지 조인이 유용.
- First테이블에 소트연산을 대체할 인덱스가 있을때
- 조인할 First 집합이 이미 정렬되어 있을때
- 조인 조건식이 등치(=)조건이 아닐때
Hash Join (해시 조인)
- 해시조인은 소트머지조인과 NL조인의 효과적이지 못한 상황에 대한 대안으로서 개발됨
- 둘 중 작은 집합을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합을 읽어 해시 테이블을 탐색하면서 조인하는 방식
- 성능을 좌우하는 요소
- 한쪽테이블이 Hash Area에 담길 정도로 충분히 작아야 함
- Build Input 해시키 컬럼에 중복값이 거의 없어야 함
- 언제 사용하면 효과적인가?
- 조인 컬럼에 적당한 인덱스가 없어 NL조인이 비효율적일때
- 조인 컬럼에 인덱스가 있더라도 NL조인 드라이빙 집?에서 Inner로 조인액세스량이 많아 Random 액세스 부하가 심할때
- 소트머지조인하기에는 두테이블의 소트부하가 심할때
- 수행빈도가 낮고 쿼리수행이 오래걸리는 대용량 테이블을 조인할때
- 해시테이블은 단 하나의 쿼리를 위해 생성하고 조인이 끝나면 바로 소멸하는 자료구조이므로, 수행빈도가 높은 쿼리애서 사용하면 CPU와 메모리 사욜률을 크게 증가시키고, 래치 경합이 발생하여 시스템 동시성을 떨어뜨림
- 그러므로 수행빈도가 낮고, 쿼리수행시간이 오래걸리는, 대용량 테이블을 조인할때 주로 사용해야한다.
'Database > Oracle' 카테고리의 다른 글
ORACLE|Table Function 과 Pipeline Table Function (테이블 함수) (0) | 2010.07.28 |
---|---|
ORACLE|JOIN 성능 - 일반적으로 크기가 작은 테이블이 먼저 드라이빙 되는 것이 빠르다. (0) | 2010.07.28 |
ORACLE|인덱스(Index) (0) | 2010.07.21 |
ORACLE|대용량 데이터베이스 솔루션 1, 2 STUDY 자료 (0) | 2010.07.09 |
ORACLE|대형 데이터 관리 (LOB, BLOB, CLOB) with Java (0) | 2010.07.09 |
Comments