728x90

# 클러스터링 인덱스(Clustering Index; Clustered Index)

- 파일의 데이터 레코드들이 특정 검색 키를 기준으로 순서화되어 있을 경우

- 그 순서화에 사용된 검색키에 해당하는 인덱스

- 주 인덱스(Primary Index)

- 오직 한 가지 인덱스만 만들 수 있음 (기회 한 번)

- 새로운 레코드 삽입될 때 물리적 순서 유지 못함 => 성능 떨어짐

- 검색 대상이 적을 때도 많을 때도 사용

- 범위 검색(between, >, <) 헤드 한 번 움직임(물리적으로 인접)

- 해당 데이터 레코드 많이 나오는 경우 사용

 

 

# 비클러스터링 인덱스(NonClustering Index; NonClustered Index)

- 파일의 순서화에 관여하지 않은 검색키에 해당하는 인덱스

- 2차 인덱스(Secondary Index)

- 범위 검색(헤드 계속 움직임)

- 가능하면 = 사용

- 검색 대상이 매우 적을 때 사용

- key값 분산도가 매우 높을 때 사용

- 포인터는 레코드들을 직접 가리키지 않고 포인터를 포함하는 버켓 가리킴

- 삽입 : 인덱스 엔트리에 새로운 데이터 레코드에 대한 포인터 추가

- 삭제 : 삭제된 데이터 레코드에 해당하였던 포인터 삭제

 

 

# 밀집 인덱스(Dense index)

- 파일에 있는 모든 검색 키 값이 인덱스 엔트리에 존재(빠름, 공간 부담)

- 삽입과 삭제시 부담

 

# 밀집 클러스터링 인덱스

- 검색 키 값과 그 검색 키 값의 첫 번째 데이터 레코드에 대한 포인터를 포함

- 똑같은 검색 키 값을 가진 레코드들은 이후 연속적으로 저장

 

# 밀집 비클러스터링 인덱스

- 인덱스의 검색키가 데이터 파일의 순서화에 참여한 검색키 값과 무관

- 포인터는 동일한 검색키를 가지는 모든 데이터 레코드들에 대한 포인터 목록을 확보

 

 

# 희소 인덱스(Sparse index)

- 인덱스 엔트리의 검색키 값은 파일의 해당 검색키 값의 일부만 있음(느림, 공간 부담 적음)

- 클러스터링 인덱스만 가능(검색 키로 정렬되어 저장될 때)

- 각 인덱스 엔트리의 포인터는 해당 검색키를 가지는 첫 번째 데이터 레코드를 가리킴

- 삽입과 삭제시 부담 적음

원하는 레코드를 찾는 방법 :

1. 주어진 검색키보다 작거나 같은 것 중 가장 큰 검색키 값을 가지는 인덱스 엔트리를 찾음

2. 해당 인덱스 엔트리가 가리키는 레코드를 시작으로 레코드를 찾을 때까지 순차적으로 검색

   블록당 하나의 인덱스 엔트리를 가지는 희소 인덱스 구성

 

 

# 다단계 인덱스(Multilevel Index)

- 주인덱스가 너무 큰 경우 :

  주기억장치에 전체 인덱스 엔트리를 적재할 수 없음

  디스크로부터 블록 단위로 입출력을 하여야 함

- 이진 검색은 인덱스가 b개 블록이면 [log2(b)] 만큼 블록 읽어야 함. 오버 플로우 블록이 사용되면 이진 검색 불가능.

  많은 디스크 입출력을 요구함

- 해결책 : 다단계 인덱스

- 주인덱스는 순차 파일로 디스크에 저장

- 원래의 주인덱스(내부 인덱스)에 대하여 희소 인덱스(외부 인덱스)를 구성

- 외부 인덱스도 너무 클 경우 또 다른 단계의 인덱스를 구성

- 두 개 이상의 단계를 가지는 인덱스

- disk I/O 줄여가며 접근

- B+ 트리 인덱스

반응형

'전공 공부 > 데이터베이스시스템' 카테고리의 다른 글

B+ 트리 인덱스(다단계 인덱스)  (0) 2021.01.06
인덱스 갱신  (0) 2021.01.06
인덱스  (0) 2021.01.05
관계형 데이터 베이스의 설계  (0) 2021.01.05
관계 집합의 표현  (0) 2021.01.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기