개발 등/ORACLE

인덱스(Index)의 유형과 특성

darkhorizon 2009. 3. 21. 14:37
728x90
반응형


1. 클러스터드 인덱스(Clustered Index)

  색인을 만들기 원하는 컬럼에 클러스터드 인덱스를 만들게 되면 기본적으로 그 행을 기준으로 물리적으로 데이터를 정렬시킨다.  테이블에 하나의 클러스터드 인덱스만 만들 수 있다.
기본키를 만들면 기본적으로 기본키에 클러스터드 인덱스가 만들어진다.

# 인덱스 생성

create index IndexName on TableName(Column[,Column]);
create clustered index IndexName on TableName(Column);

# 인덱스의 생성과정

 1. 데이터 페이지에 클러스터드 인덱스 칼럼을 기준으로 데이터가 물리적으로 정렬된다.
 2. 각 데이터 페이지의 첫번째 레코드의 인덱스 칼럼을 기준으로 키 값에 해당하는 상위 레벨의 인덱스 페이지가 생성된다.
     이때 생성되는 인텍스 페이지는 전체 데이터페이지의 약 5%정도의 크기가 된다.
 3 데이터 페이지는 leap 페이지가 된다.
 4. 칼럼에 대한 검색이 시작되면 자신의 키값보다 큰 상위레벨의 인덱스 키를 검색한다.
 5. 검색된 상위레벨의 키값 바로 아래의 키값에 해당되는 데이터페이지를 검색한다.
 6. 해당 데이터페이지에서 자신의 키값보다 큰 값을 검색한 후 바로 아래인 자신의 칼럼 값을 찾는다.

create unique index s_emp_idx on s_emp(id);


예)create clustered index 우편번호_idx on 우편번호1(읍면동명);

1. select * from 우편번호1 where 읍면동명 like '가좌%';
2. select * from 우편번호2 where 읍면동명 like '가좌%';

클러스터드 인덱스를 생성한 우편번호1과 그렇지 않은 우편번호2 테이블의 쿼리성능을 분석하면 1번의 경우엔 약 2%, 2번의 경우엔 약 98%의 프로세스가 할당된다.
단, '%가좌%' 처럼 인자값 앞에 %를 붙일 경우에는 index의 이점을 거의 찾을 수 없다

인덱스 정의시 알아두어야 하는 기본사항
1. 기본키
  : 기본키를 설정하면 해당 컬럼의 유니크한 클러스터드 인덱스가
    기본적으로 만들어진다.
2. 참조키(Foreign Key)
  : 기본적으로 인덱스가 만들어지지 않는다
3. 유니크 제약조건
  : 해당 컬럼에 유니크한 넌 클러스터드 인덱스가 만들어진다

728x90