문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 | 다음 판 양쪽 다음 판 | ||
study:oracle:datadb:1week_2 [2010/05/06 15:26] ahmax |
study:oracle:datadb:1week_2 [2010/05/06 15:43] ahmax vol |
||
---|---|---|---|
줄 284: | 줄 284: | ||
* 전화번호 앞번호가 018이면 그냥 두고 아니면 016을 붙여서 비교할 때 | * 전화번호 앞번호가 018이면 그냥 두고 아니면 016을 붙여서 비교할 때 | ||
- | | + | |
+ | on call_data (decode(substr(call_number, | ||
=== 다. 가공처리 결과의 검색 === | === 다. 가공처리 결과의 검색 === | ||
줄 290: | 줄 291: | ||
* 상품별로 데이터량이 많을 때 주문단가에서 할인금액을 뺀 실제 적용단가에 주문수량을 곱하여 금액별로 100개의 상품을 조회할때 복잡한 계산식을 함수기반인덱스로 만들어 결과값을 논리컬럼으로 저장해두면 힌트에서 인덱스를 사용할 수 있다. | * 상품별로 데이터량이 많을 때 주문단가에서 할인금액을 뺀 실제 적용단가에 주문수량을 곱하여 금액별로 100개의 상품을 조회할때 복잡한 계산식을 함수기반인덱스로 만들어 결과값을 논리컬럼으로 저장해두면 힌트에서 인덱스를 사용할 수 있다. | ||
- | | + | |
+ | on order_items(item_cd, | ||
| | ||
줄 297: | 줄 299: | ||
and rownum <= 100 | and rownum <= 100 | ||
+ | * 말일, 단가, 율의 검색 : 해당월에 가장 높은 sal_amount가 발생한 건을 찾는 경우 | ||
+ | | ||
+ | |||
+ | * 기간을 검색하는 경우 | ||
+ | |||
+ | | ||
+ | |||
+ | * 길이를 검색하는 경우 . | ||
+ | |||
+ | | ||
+ | |||
+ | === 라. 오브젝트 타입의 인덱스 검색 === | ||
+ | |||
+ | * 육면체(cube)를 오브젝트타입으로 생성하오 이것을 이용하여 부피를 구하는 예 | ||
+ | |||
+ | 길이, | ||
+ | |||
+ | | ||
+ | ( | ||
+ | length number, | ||
+ | width number, | ||
+ | heigth number, | ||
+ | member function volume return number DETERMINISTIC | ||
+ | ); | ||
+ | | ||
+ | create or replace type body cube as | ||
+ | member function volume return number is | ||
+ | begin | ||
+ | | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | cube유형(TYPE)으로된 CUBE_TAB 테이블을 생성하고, | ||
+ | |||
+ | | ||
+ | | ||
+ | 인덱스를 경유하여 엑세스를 수행 | ||
+ | |||
+ | | ||
+ | |||
+ | === 마. 베타적 관계의 인덱스 검색 === | ||
+ | |||
+ | * 여기서 말하는 배타적(Exclusive)관계에 있는 컬럼이란 데이터 모델링 상에서 서로 다른 서브타입(Subtype)에 있는 컬럼들 중에서 동일한 속성으로 통합할 수 있는 컬럼들의 관계를 말한다. | ||
+ | |||
+ | == 배타적 관계의 유일성 보장 == | ||
+ | |||
+ | * 어떤 배타적 관계에 있는 속성들을 관찰하면 동일한 속성(subtype)으로 볼 수 있으며 이들을 결합했을 경우 반드시 존재해야한다거나 유일해야 한다는 원칙이 있을 수 있다. 이런경우 함수기반 인덱스를 생성하여 처리의 단순화 및 시스템을 통한 제약조건의 검증까지 보장받을 수 있다. | ||
+ | |||
+ | * 배타적 관계에 있는 주민등록번호와 사업자등록번호를 결합하여 유일성을 체크할 수 있을 뿐 아니라 검색의 단순화를 얻을수 있는 예 | ||
+ | |||
+ | | ||
+ | on customers(case when cust_type =1 then resident_id else business_id end); | ||
+ | |||
+ | | ||
+ | where (case when cust_type =1 then resident_id else business_id end) = :b1; | ||
+ | |||
+ | * 특정한 범위의 데이터에 대해서만 유일성을 체크할도록 할 수 있는 사례. | ||
+ | * 예를들어 ' | ||
+ | |||
+ | | ||
+ | case when then ins_type = ' | ||
+ | case when then ins_type = ' | ||
+ | ); | ||
+ | |||
+ | * 이 인덱스는 INS_TYPE =' | ||
+ | * 다음과 같은 입력이 발생하면 에러가 나타단다. | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | 1row created. | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | ERROR at line 1; | ||
+ | | ||
+ | |||
+ | == 배타적관계의 결합인덱스 == | ||
+ | * 어떤 구분값을 기준으로 결합인덱스의 구성이 달라진다면 함수기반인덱스로 해결할 수 있다. | ||
+ | |||
+ | | ||
+ | | ||
+ | case when ord_type=1 then delivery_date else shipping_date end), // 중간 컬럼인덱스 | ||
+ | | ||
+ | ) | ||
+ | |||
+ | |||
+ | |||
+ | |||