- HOME
- [종료]대용량 데이터베이스 스터디
- 2011년 하반기 대용량데이터베이스 스터디
- 새로쓴 대용량 데이터베이스 솔루션1
- 2.1. B-tree 인덱스
2장 인덱스의 유형과 특징
- 인덱스는 말 그대로 전체 중 특정한 부분을 바로 찾을 수 있는 목차나 색인의 개념임
2.1 B-tree 인덱스
- B-tree인덱스는 관계형 데이터베이스에서 가장 일반적으로 사용되는 인덱스라 할 수 있음
2.1.1 B-tree 인덱스의 구조
- 인덱스는 루트 블록과 브랜치 블록, 리프 블록으로 구성
- Page 61 참조
2.1.2 B-tree 인덱스의 조작
- 인덱스를 생성할 때 일어나는 내부적인 현상과 새로운 데이터 입력 시 발생하는 분할, 삭제, 갱신으로 인한 변화 및 스캔을 할 때 일어나는 내용을 알아 봄
(가) 인덱스 생성
(나) 인덱스 분할
- 인덱스는 정렬되어야 한다는 점 때문에 이미 생성된 구조에 새로운 로우가 삽입되면 기존의 위치에 파고 들어가야 하는 문제가 발생
- PCTFREE에 도달한 인덱스 블록에 마지막 값이 입력되면 구조에 영향을 미치지 않고 새로운 블록을 만들고 거기에 등록
- 중간 값이 입력되면 PCTFREE가 초과하므로 분할이 발생
- 두 블록 모두 수정되어야 하므로 2/3만 채우도록 하면서 양쪽을 모두 새로 재편
- 이 이유는 또 다른 로우가 입력될 경우 분할이 계속 발생하는 것을 방지 하기 위함
- 중간에 로우가 입력된 경우 2/3만 채우게 되므로 만약 이렇게 분할이 발생하고 그 블록에 값이 들어오지 않는다면 저장공간이 크게 늘어날 소지도 있음. 이를 교정하는 방법은 인덱스를 재생성(Rebuild)하는 방법뿐임
(다) 데이터의 삭제 및 갱신
- 데이터를 삭제했을 때 테이블의 로우는 제거되지만 인덱스의 로우는 단지 삭제되었음을 표시하므로 그 자리에 인덱스 로우가 추가되지 않을 경우 저장공간의 낭비뿐 아니라 스캔해야 할 블록이 증가함
(라) 인덱스를 경유한 검색
- 루트를 찾음
- 주어진 값보다 큰 최소값을 찾음
- 리프 블록을 찾을 때까지 2번을 반복함
- 리프 블록에서 값을 찾은 후 ROWID를 이용해 테이블을 액세스
2.1.3 리버스키 인덱스
- 리버스는 Desc이 아닌 컬럼값 자체의 역순을 의미함
예) 1112, 1113 -> 2111, 3111
- 클러스터링 팩터가 나빠짐 -> Hot Block을 제거하기 위한 용도
- '=' 조건만을 사용할 수 있음 -> 실제 정렬과 달라지기 때문에
- HOME
- [종료]대용량 데이터베이스 스터디
- 2011년 하반기 대용량데이터베이스 스터디
- 새로쓴 대용량 데이터베이스 솔루션1
- 2.1. B-tree 인덱스