create index from_loc_idx on orders (substr(ship_id,5,3));
create index repair_loc_idx on orders (substr(ship_id,3,2), ord_date);
2. 조인 연결고리 컬럼이 대응하지 않는 경우의 해결
......
from item_group x, items y
where x.class1||x.class2||x.class3 =
y.group_cd ......
......
from item_gropu x, items y
where x.class1 =
substr(y.group_cd,1,2)
and x.class2 =
substr(y.group_cd,3,2)
and x.class3 =
substr(y.group_cd,5,3)
......
create index group_cd_idx_ on
item_group (class1||class2||class3);
3. 일자 컬럼이 분할된 경우의 해결
where sal_yyyy >= '2005'
and sal_mm >= '12' and sal_dd >= '10' (x)
where sal_yyyy||sal_mm||sal_dd >=
'20051210' (o) 문제점 : Index 사용불가
create index sal_date_idx on sales
(sal_yyyy||sal_mm||sal_dd);
4. 데이타 타입이 상이한 조인 컬럼
create index deptno_idx on
emp(to_number(deptno));
5. 조인 컬럼이 경우에 따라 달라지는 경우
.......
from sales s, department d
where d.deptno = (case when sal_type =
1 then sal_dept else agent_no end)
and d.location = 'BUSAN'
.......
create index deptno_idx on sales
(case when sal_type = 1 then
sal_dept else agent_no end);
6. 대/소문자나 공백이 혼재된 컬럼의 검색
create index ename_upper_ix
on employees (upper(ename));
create index ename_upper_ix on
employees (upper(replace(ename,' '));
7. NULL 값을 치환하여 검색
.....
where :input_date between start_date
and nvl(end_date, '99991231');
.....
create index end_date_idx on
account_history (nvl(end_date, '99991231'), start_date);
8. 복잡한 계산 결과의 검색
create index order_amount_idx on
order_items
(item_cd, (order_price -
nvl(order_discount,0)) * order_count));
select /*+ index_desc(x
order_amount_idx) */ *
from order_items x
where item_cd = :b1
and rownum <= 100;
9. 기간, 컬럼 길이 검색
create index item_idx on activities
(expire_date - start_date);
create index source_length_idx on
print_media (text_length(source_text));
10. 배타적 관계의 유일성 보장
create unique index official_id_idx on
customers
(case when cust_type = 1 then
resident_id else business_id end);
select * from customers
where (case when cust_type = 1 then
resident_id else business_id end) = :b1;
함수기반 인덱스는 버전에 따라 제약사항에 차이가 있으므로 관련 메뉴얼을
참조하세요.
<참조> 새로쓴 대용량 데이타베이스 솔루션
'Database > Oracle' 카테고리의 다른 글
도메인 인덱스(Domain Index) (0) | 2010.04.28 |
---|---|
비트맵 인덱스(Bitmap Index) (0) | 2010.04.28 |
비-트리 인덱스(B-Tree Index) (0) | 2010.04.27 |
Db file sequential read (0) | 2010.04.26 |
USER_CONS_COLUMNS (0) | 2010.04.22 |