인덱스

인덱스가 사용되지 않는 경우

- 인덱스 컬럼은 비교되기 전에 변형이 일어나면 인덱스를 사용할 수 없다.
  인덱스는 가공되기 전에 값으로 생성되어 있지 가공된 후의 값을 가지고 있지않다.
- 부정형으로 조건을 기술한 경우에도 인덱스를 사용하지 않는다.
- 인덱스 컬럼이 null 로 비교되면 사용할 수 없다.

결합인덱스
- 첫번째 컬럼이 검색되지 않으면 소용없다.
- 첫번째 컬럼이 '='으로 검색되어야 한다.
  between이나 like 로 검색되면 효율이 떨어진다.

개발시 인덱스 추출 요령

1. 반복 수행되는 액세스 형태를 찾는다.
  - 기본키, 외부키, 서브쿼리시 연결고리가 되는 컬럼

2. 분포도가 아주 양호한 컬럼들을 발췌하여 액세스 유형을 조사한다.

3. 자주 넓은 범위의 조건이 부여되는 경우를 찾는다.
  - 분포도는 좋으나 자주 'LIKE'나 'BETWEEN"으로 사용하게 되면 분포도가 넓어질 것이다.
     처리방식에 따른 최대범위별 최대크기(최대 row 의 수), 자주 사용되는 정렬의 순서,
     처리유형(order by , group by) 등을 같이 표시

4. 조건에 자주 사용되는 주요 컬럼들을 추출하여 액세스 유형을 조사한다.

5. 자주 결합되어 사용되는 컬럼들의 조합형태 및 정렬순서를 조사한다.
   - 혼자 사용되는 컬럼중에서 그 컬럼이 여러개의 컬럼과 같이 쓰인다면 그중에서도 우선순위를 정한다.
     (어떤 컬럼과 더 자주 같이 사용되는지를 표시- 결합도를 확실히 한다)
   - 결합조건(operator)을 같이 표시한다. '=' 인지, 'LIKE' 인지를 표시한다.
   - 정렬순서를 같이 표시한다. (group by, order by 를 표시한다.)

6. 역순으로 정렬하여 추출되는 경우를 찾는다.
   - 이러한 경우는 어떤 방법을 써도 빠른 응답을 기대할 수 없는데, 오직 하나의 방법은
     힌트를 이용해 인덱스를 역순으로 액세스하여 인덱스를 구성하는 것이다.

7. 일련번호를 부여하는 경우를 찾는다.

8. 통계자료 추출을 위한 액세스 유형을 조사한다.