매주 각 스터디 팀원들이 담당 분량을 정리해서 올리고 토론식으로 진행합니다.
스터디 포스팅은 팀원들에의해 이루어지지만 스터디 참여는 사이트 회원 모두가 가능합니다.
진행기간: 2009.07 ~ 2009.10. 종료
2부 2.3.(2.3.6-2.3.8) 조인 종류별 특징 및 활용 방안(스타조인, 비트맵조인인덱스)
2009.09.07 23:21
2.3. 조인 종류별 특징 및 활용방안
2.3.6. 스타조인
- 조인되는 집합들 간의 관계가 별처럼 생긴 형태이다(텍스트 그림 참조)
(예)
SALES(salesno, product_cd, dept_no, country_cd, type_cd, ...)
PRODUCTS(product_cd, ...)
DEPT(dept_no, ...)
COUNTRY(country_cd, ...)
TYPES(type_cd, ...)
- 여러 개의 디멘전(dimension) 테이블이 있을 때 이들 각각을 팩트테이블(fact table)에 연결시켜서는 안된다는 개념이다. 마스터테이블을 중심으로 테이블을 조인하되 마스터 테이블의 투플 수를 얼마나 줄여 가느냐가 중요한 포인트이다. 마스터테이블에 결합인덱스를 적절하게 구성하는 것이 중요하다.
- 해결해야할 문제점
(1) 마스터테이블의 디멘전 테이블 간에는 릴레이션이 없기 때문에 특별한 방법을 동원하여 디멘전테이블 간의 연결을 먼저 시도할 수 없다.
(2) 최적화로 액세스할 수 있는 인덱스의 구성이 중요하다.
- 스타조인은 디멘전의 카티젼 곱이 지나치게 많지 않을 때 사용한다.(MERGE JOIN(CARTESIAN))
- (예) DEPT와 PRODUCTS를 먼저 조인한다는 SALES 테이블과 조인하는 예(* DEPT_NO+PRODUCT_CD 인덱스가 존재한다면 HASH JOIN 대신 NESTED LOOP 조인이 사용된다.)
SELECT STATEMENT Optimizer=ALL_ROWS
HASH JOIN
MERGE JOIN(CARTESIAN)
TABLE ACCESS(FULL) OF 'DEPT'
BUFFER(SORT)
TABLE ACCESS(FULL) OF 'PRODUCTS'
TABLE ACCESS(FULL) OF 'SALES'
2.3.7. 스타변형조인
- (많이 생략하였습니다....)
- 스타조인의 단점을 개선하기 위한 방법이다. 비트맵 인덱스의 특징을 살린다.
- 비트맵을 이용한 인덱스머지를 한다.
- 예제(교재참조) - 생략
- 스타변형조인이 일어나기 위한 전제 조건
(1) 하나의 팩트 테이블과 2개 이상의 디멘전테이블
(2) 팩트 테이블에 있는 디멘전 속성(디멘전 테이블의 외부키)에 비트맵 인덱스 존재
(B-tree 인덱스가 있어도 비트맵 컨버전이 일어나서 스타변형조인이 발생 가능)
(3) 팩트테이블에 통계정보가 생성되어 있어야 함.
(4) Star_transformation_enabled 인자가 True 혹은 Temp_disable로 설정
(아니면 직접 STAR_TRANSFORMATION 힌트를 준다)
- 스타변형 조인의 제약조건 7가지(교재 참조)
- 옵티마이저가 스타변형조인을 하지 않는 경우
(1) 팩트 테이블이 가진 조건만으로도 충분히 처리범위가 줄어들 경우
(2) 팩트 테이블 크기가 너무 작아 스타변형조인이 필요없다고 판단될 경우
2.3.8. 비트맵 조인 인덱스
- 비트맵 조인 인덱스 사용방법
- 생성 : 생성된 인덱스는 cust_job 속성이 SALES 팩트 테이블 컬럼처럼 인식된다.
CREATE BITMAP INDEX sales_cust_job_bix ON sales(customers.cust_job)
FROM sales, customer
WHERE sales.cust_id=customer.cust_id
LOCAL LOGGING COMPUTE STATISTICS;
- 조인시 인덱스 생성 집합이 보존되기 위한 조건
(1) 인덱스를 생성하는 테이블에 조인되는 테이블의 속성은 기본 키이거나 유일성 제약을 가져야 한다.
(2) 참조테이블의 조인키가 결합인덱스로 구성되어 있으면 모든 컬럼이 조인에 존재해야한다.
(3) 조인조건은 반드시 = 조건이어 야하며 아우터조인은 사용할 수 없다.
(4) 인덱스일체형 테이블이나 임시테이블과는 비트맵 조인인덱스를 생성할 수 없다.
(5) 인덱스를 생성하는 조인 문에 집합연산, 집계함수, GROUP, ORDER, CONNECTED 문을 사용할 수 없다.
(6) 인덱스 컬럼은 반드시 조인되는 테이블에 소속된 컬럼이어야 한다.
(7) 비트맵 조인인덱스는 비트맵 인덱스의 각종 규칙을 준수하여야 한다.
- 비트맵 조인인덱스의 제약사항
(1) 병렬 DML 처리는 비트맵 조이인덱스를 가지는 테이블에서만 지원된다.
(2) 비트맵 조인인덱스를 사용하면 어떤 트랜잭션에서 동시에 하나의 테이블만 처리해야한다. 조인된 테이블이 COMMIT되지 않은 상태에서 동시에 변경되면 일관성을 보장할 수 없다.
(3) 조인 문장에서 동일한 테이블이 두 번 등장할 수 없다.
-- 정말 미리 읽어야할 규칙들이 많네요!! 어설프게 알아서 사용하는 것이 위험할 수도...
바쁘실텐데 한주 한주 보는것도 힘드셨을텐데
수고하셨습니다. ^^ ㅋ