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. 유니크 제약조건
: 해당 컬럼에 유니크한 넌 클러스터드 인덱스가 만들어진다