메뉴 건너뛰기

SAP 한국 커뮤니티



인덱스(index)란 무엇인가?

sapjoy 2007.02.08 09:17 조회 수 : 358

. 인덱스 생성
  
도입강의에서 인덱스란 어떤 것이며, 어떤 방식으로 동작하는지 충분히 학습하셨는지요?
 
아무리 인덱스가SQL문을 응답속도를 빠르게 한다고 해서 무조건 만드는 것이 아닙니다. 어떤 경우에는 잘못 생성되어서 테이블을 FULL SCAN하는 것보다 응답속도가 느리게 나오는 경우도 있습니다.
 
이번 절에서는 인덱스의 선정 시 고려되어야 될 절차 및 종류 등에 대해서 알아 보도록 하겠습니다.

1.1 인덱스 생성시 고려사항

* 인덱스의 적용대상  
  - 중, 대규모 테이블(6블럭 이상)
  - 대상 데이터의 10% 이내의 데이터 요구인 경우
  - 스캔의 범위를 줄이고자 할때
  - 정렬을 필요로 하는 경우
  - 테이블에 접근하지 않고 인덱스만으로 데이터 요구를 해결하고자 하는 경우

* 인덱스의 적용 시 고려사항  
  - 인덱스를 위한 추가적인 기억공간을 필요로 함.
  - 인덱스와 테이블 I/O수의 합계가 전체 테이블을 스캔하는 I/O수보다 적은 경우에만 성능향상에
    기여한다고 볼 수 있음.(손익분기점 : 10~15%)
  - 여러 칼럼을 결합하여 인덱스를 구성하는 경우 칼럼의 순서 중요
  - 입력, 삭제 혹은 인덱스 칼럼의 값을 수정하는 경우 인덱스 데이터도 변경되어야 하므로 그에
    따른 오버헤드도 고려할 것 → 테이블당 인덱스의 수는 4개 정도가 적당
  - 새로 추가된 인덱스는 기존 엑세스 경로에 영향을 미칠 수 있음.

* 인덱스의 적용 시 고려사항  
  - 크기가 5~6블럭 이상되는 테이블
  : 테이블의 크기가 5~6블럭 이하인 것은 인덱스를 만들지 않고 테이블을  FULL SCAN해도 무방합니다.
  - 무작위접근(Random Access)이 빈번한 테이블
  : 단순보관용이거나 전체조회용일 경우에는 인덱스를 생성하지 않습니다.
  - 특정범위/순서의 데이터조회가 필요한 테이블
  - Join의 연결고리가 되는 칼럼의 테이블
  - 참조무결성을 지정한 경우 연결고리가 되는 칼럼의 테이블

* 인덱스 대상 칼럼 선정 기준  

  - 인덱스를 생성하고자 하는 칼럼의 분포도는 10~15%를 넘지 않아야 한다.

     분포도 = 1/칼럼값의 종류 * 100            = 데이터별 평균 로우 수/테이블의 총 로우 수 *100

  - 인덱스 머지(Index Merge)
  : 일반적으로 가장 좋은 하나의 인덱스만 사용하는 것이 여러 개의 인덱스를 사용하는 것보다 유리

  - 결합인덱스(Composite Index)
  : 사용빈도 => 동등조건(=) 비교여부 → 분포도 → 자주 사용되는 정렬 순서

* e-abap님에 의해서 게시물 이동되었습니다 (2007-02-08 09:28)