DataBase/SQL

[SQL] 인덱스 (클러스터, 비클러스터) 개념

mongyang 2013. 2. 26. 17:03

인덱스.


1. 개념


A. 간단한 비유로 일반적으로 책 뒤쪽에 위치하는 ‘찾아보기’를 들 수 있다.

B. 일 예로, ‘홍길동전’에서 ‘율도국’이라는 단어를 찾는다고 가정해보자. 만일 이 책에 ‘찾아보기’가 

없다면 책을 첫 장부터 훑어야 할 것이다. 그런데 찾아보기가 있다면 한번에 찾아 갈 수 있다. 

이 것이 인덱스의 기본적인 개념이다.


2. 인덱스 생성시 발생되는 특징

A. 검색 속도 향상.

           i. 시스템의 부하를 줄여, 시스템 전체 성능향상에 기여 가능.


B. 인덱스를 위한 추가 공간이 필요.

C. 생성에 시간이 소요 될 수 있음.

D. INSERT, UPDATE, DELETE가 자주 발생한다면 성능이 많이 하락할 수 있다.



3. 종류

A. 클러스터형 인덱스(Clustered Index).

           i.  테이블당 한 개만 생성이 가능하다.

           ii. 행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬한다.

           iii.영어 사전처럼 책의 내용 자체가 순서대로 정렬이 되어 있어, 인덱스 자체가 책의 내용과 같음.


B. 비클러스터형 인덱스(Nonclustered Index)

           i. 테이블당 여러 개를 생성할 수 있다.

           ii. 비클러스터형 인덱스는 그냥 찾아보기가 있는 일반 책과 같다.


4. 인덱스 생성

A. 인덱스는 열 단위로 생성된다.

B. 하나의 열에 인덱스를 생성할 수 있고, 여러 열에 하나의 인덱스를 생성 할 수 있다.

C. 테이블 생성시 하나의 열에 Primary Key를 지정하면 자동으로 클러스터형 인덱스가 생성된다.

D. Primary Key를 지정하는 열에 강제적으로 비클러스터형 인덱스를 지정할 수 있다.

E.  제약 조건 없이 테이블 생성시에 인덱스를 만들 수 없으며, 인덱스가 자동 생성되기 

위한 열의 제약 조건은 Primary Key또는 Unique 뿐이다.


5.     인덱스의 내부 동작.

A. B-Tree (Balanced Tree : 균형트리)

            i. 


B. 삽입 동작 시 (EEE삽입)

            i. 

C. 삽입 동작 시 (FFF삽입) – 페이지 분활

            i. 

6.     클러스터형 인덱스 생성 및 구조

A. 

B.      

C. 클러스터형 인덱스를 구성하기 위해서 행 데이터를 해당 열로 정렬한 후에, 루트 페이지를 만들게 된다.

D. 클러스터형 인덱스는 루트 페이지와 리프 페이지로 구성되며, 리프 페이지는 데이터 그 자체이다.

E. 클러스터형 인덱스는 검색 속도가 비클러스터형 인덱스 보다 더 빠르다.

7.     비클러터형 인덱스 생성 및 구조

A.     

B. 

C. 비 클러스터형 인텍스는 데이터 페이지를 건들지 않고, 별도의 장소에 인덱스 페이지를 생성한다.

D. 인덱스 페이지의 리프 페이지에 인덱스로 구성한 열을 정렬한 후 위치 포인터를 생성한다.


8. 정리

A. 클러스터형 인덱스

           i. 인덱스를 생성할 때는 데이터 페이지 전체를 다시 정렬한다.

           ii.이미 대용량의 데이터가 입력된 상태라면, 업무시간에 클러스터형 인덱스를 생성하는 

것은 심각한 시스템 부하를 줄 수 있으므로 신중해야 한다.

          iii. 클러스터형 인덱스는 인덱스 자체의 리프 페이지가 곧 데이터 페이지이다. 즉, 인덱스 

자체에 데이터가 포함되어 있다고 말할 수 있다.

          iv. 비클러스형 인덱스 보다 검색 속도는 더 빠르다. 하지만 데이터의 입력/수정/삭제는 느리다.

          v.  클러스터 인덱스는 성능이 좋지만, 테이블에 한 개만 생성할 수 있다. 그래서 어느 열에 

클러스터형 인덱스를 생성하느냐에 따라서 시스템의 성능이 달라질 수 있다.


B. 비 클러스터형 인덱스

          i. 비 클러스터형 인덱스를 생성할 때는 데이터 페이지는 그냥 둔 상태에서 별도의 

페이지에 인덱스를 구성한다.

          ii. 비 클러스터형 인덱스에서 인덱스 자체의 리프 페이지는 데이터가 아니라, 데이터가 

위치하는 포인터(RID)다. 클러스터형 보다 검색 속도는 느리지만, 데이터의 입력/수정/삭제는 더 빠르다.

          iii. 비 클러스터형 인덱스는 여러 개 생성할 수 있다. 하지만, 함부로 남용할 경우에는 오히려 

시스템 성능을 떨어뜨리는 결과를 가져온다. 










'DataBase > SQL' 카테고리의 다른 글

[SQL] 동적쿼리와 like 구문.  (0) 2013.03.15
[SQL] 컬럼에 제약 조건 추가.  (0) 2013.03.07
[SQL] 테이블 변수  (0) 2013.02.13
[SQL] ALTER TABLE  (0) 2013.02.13
[SQL] SELECT INTO (임시 테이블 만들기) 사용법  (0) 2013.02.13