2013년 9월 16일 월요일

인덱스 선정 기준

테이블 형태별 적용기준
1. 적은 데이터를 가진 소형 테이블
- DB_FILE_MULTIBLOCK_READ_COUNT 값 이하 블록 크기의 테이블
- 한번의 멀티블럭 I/O 에 의해 인덱스 없이 전체 테이블 스캔 가능
2. 주로 참조되는 역활을 하는 중대형 테이블
-트랙잭션 데이터의 행위,주체,목적이 되는 개체들로 구성된 테이블
3. 업무적 구체적인 행위를 관리하는 중대형 테이블
- 매출정보 와 같이 업무의 구체적인 수행 내용을 담고 있는 트랜잭션 테이블
4. 저장용 대형 테이블
- 로그성 데이터 관리 목적의 테이블
- 저장 우선,갱신 거의 없으므로 PCTFREE 여유공간 불필요,PRIMARY  KEY 제약조건불필요

분포도와 손익 분기점
-어떻게 인덱스를 구성해야 가장 최소의 범위를 처리하는가?
-최소의 인덱스로 최대의 엑세스 형태를 만족하는 전략 필요

인덱스 머지와 결합 인덱스 비교
-인덱스를 머지하는 것보다 가장 좋은 분포도의 하나의 인덱스만 사용하는 것이 대부분유리
-머지할 대상이 서로 비슷한 분포도일 경우 효용 가치 있음
-결합인덱스는 인덱스를 머지하여 성공한 결과를 저장한 형태
-컬럼이 '=' 사용하면 항상 유리

분포도와 결합순서의 상관관계
select * from tab where col1 = 'A' and col2=115;
index1 =col1 + col2  
index2= col2 + col1
-분포도가 넓은 컬럼 선행하여도 equal 을 사용한경우 실제 처리량은 서로 차이 없음

equal (=) 이 결합순서에 미치는 영향
select * from tab where col1 = 'A' and col2 between 113 and 115;
-인덱스 첫컬럼이 '=' 로 사용되지 않으면뒤 컬럼의'='사용은 처리범위 감소에는효과가없다.

IN 연산자를 이용한 징검다리 효과
range scan :
BETWEEN , LIKE -> 선분 , IN -> 점 
select * from tab where col1 = 'A' and col2 between 113 and 115; 
inlist iterator : 
INLIST ITERATOR 실행계획으로 IN 리스트 값만큼 인텍스 탐침
select * from tab where col1 = 'A' and col2 in (113 , 115 ); 
optimizer where (col2=113 and col1='A') or (col=115 and col1='A')

결합 인덱스의 컬럼순서 결정 기준
1. 항상 사용하는가?
2. 항상 '=' 로 사용하는가?
3. 어느것이 더 좋은 분포도를 가지는가?
4. 자주 정렬되는 순서는 무엇인가?
5. 부가적으로 추가시킬 컬럼은?









댓글 없음:

댓글 쓰기