목록전체글 (117)
미스터 역마살
오늘은 UNION 과 UNION ALL 에 대해 알아보자 먼저 UNION 은 UNION DISTINCT의 줄여서 UNION이라고 한다고 생각한다. 따라서 중복제거 작업이 이루어지게 된다는 것이다. UNION의 특징에 대해 몇가지 알아보자 1. 두 테이블간의 결합시 사용하는 구문 2. 중복되는 값이 존재하지 않음 3. 중복을 제거하다보니 불가피하게 정렬작업을 하게됨 4. 그로인해 소트부하가 생겨 성능에 좋지 않음. 따라서 인덱스가 없거나 대용량 테이블간의 결합이라면 성능에 악영향 을 미치게 될 것이다. 하지만 UNION ALL의 경우는 중복을 허용하고 말그대로 테이블 두개를 딱! 하고 붙이는 것이기 때문에 정렬 작업이 일어나지 않는다. 예를 들어 이런 테이블이 있다고 할 경우 UNION ALL 의 경우 3..
IOT란 - 테이블을 찾아가기 위한 rowid를 갖는 일반 인덱스와는 달리 IOT는 모든행 데이터를 리프블록에 저장하고 있어 ROWID를 통한 랜덤 액세스가 일어나지 않는 테이블을 말한다. 한마디로 줄여서 말하면 "인덱스 리프블록이 곧 데이 터 블록인 테이블" 이다. 특징 - 일반적으로 테이블에 데이터 삽입시 랜덤방식으로 이루어 지지만 IOT는 인덱스 구조의 테이블 이므로 정렬된 상태를 유지하며 삽입된다. - 인위적으로 클러스터링 팩터를 좋게 만드는 방법 중 하나다. - 테이블 랜덤 액세스를 발생하지 않아 빠른 성능을 자랑한다. - 데이터 입력시 성능이 느리다. IOT 사용 기준 - 크기가 작고 NL조인의 반복 Look Up 하는 테이블 - 폭이 좁고 긴(행이 많은) 테이블 - 넓은 범위를 주로 검색하는..
- Hash 조인의 특징 1. Build Input의 크기가 작을때 효과적이다. ( PGA에 할당되는 Hash Area에 담길정도로 충분히 작아야 함) 2. 해시 키값으로 사용되는 컬럼에 중복값이 거의 없을때 효과적이다. ( Hash 알고리즘의 성능은 얼마나 Hash 충돌을 최소화 하느냐에 따라 달렸다.) -Hash 조인 선택 기준 1. 조인컬럼에 인덱스가 없어 비효율 적일때 2. 조인컬럼에 인덱스가 있더라도 NL조인 드라이빙 집합에서 Inner 쪽 집합의 조인 Access 양이 많아 Random Access 부하가 심할 때 3. Sort Merge 조인 하기에는 두 테이블이 너무 커 소트부하가 심할때 4. 수행빈도가 낮고 쿼리수행시간이 오래걸리는 대용향 테이블을 조인할 때 -끝-
- Sort Merge 조인의 특징 1. NL 조인은 조인컬럼에 인덱스 유무에 영향을 받지만 Sort Merge 조인은 영향을 받지 않는다. (물론 인덱스가 있다면 좋겠지만 말이다.) 2. 양쪽 집합을 정렬한 다음 NL조인과 같은 방식으로 진행하지만 PGA영역에 저장된 데이터를 이용하기 때문에 굉장히 속도가빠르다.(소트부하만 감수한다면..) 3. 양쪽집합을 개별적으로 읽고나서 조인한다. 따라서 조인컬럼에 인덱스가 없는 상황에서 두 테이블을 독립적으로 읽어 조인대상 집합을 줄일수 있을때 아주 유리하다. 4. 스캔위주의 Access 방식 사용 5. 등치 조건 말고도 사용이 가능하다. - Sort Merge 조인이 Hash 조인보다 좋은 상황 1. First 테이블에 소트연산을 대체할 인덱스가 있을때. 2. ..
- Nested Loop 조인의 특징 1. Random Access 위주의 조인 방식이다!! 따라서 인덱스 구성이 아무리 잘되어 있더라도 대량의 데이터를 조인 할때는 비효율 적이다. 2. 한 레코드씩 순차적으로 진행된다. 이 때문에 아무리 대용량 이라도 극적인 응답속도를 낼 수 있다. (부분범위 처리가 가능할 경우) 3. 먼저 Access 되는 Table의 범위에 의해 전체 일량이 결정 된다. 4. 다른 조인 방식과 비교했을때 인덱스 구성 전략이 특히나 중요하다. 5. NL 조인을 사용하기 위해서는 조인 컬럼에 인덱스가 필요하다. 결과적으로 NL조인은 소량의 데이터를 주로 처리하거나 부분범위 처리가 가능한 OLTP성 환경에 적격이다. -끝-