본문 바로가기

DB

[책정리] B-Tree 인덱스

새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다.


B-Tree 인덱스 블록의 분할(Split)

-      인덱스의 중간값으로 데이터가 삽입되는 경우 인덱스 정렬을 준수해야 하기 때문에 인덱스 블록이 분할되며 삽입이 이루어진다.(단 분할은 PCTFREE가 초과하는 경우 발생)

-      그러므로 인덱스가 발생일시+항목’ 따위로 구성된다면 인덱스의 제일 뒤로 Append 되기 때문에 인덱스 블록의 분할은 발생하지 않으므로 효율이 좋아진다.

B-Tree 인덱스의 삭제 및 갱신

-      삭제가 되는 경우 인덱스에 삭제 플래그만 추가되므로 문제는 없으나 인덱스 저장 공간의 낭비가 발생한다.

-      인덱스 컬럼이 갱신되는 경우내부적으로 삭제 및 삽입이 발생한다.


B-Tree 인덱스를 경유한 검색

    루트 블록을 찾는다.

    주어진 값보다 같거나 큰 최소값을 찾는다.(>=)

ü  만약첫 번째 로우가 주어진 값보다 크면 Lmc(Left Most Child Block)에 있는 dba(Data Block Address)로 이동한다.

ü  만약동일한 값이 있으면 그 로우에 있는 dba로 이동한다.

ü  만약동일한 값이 없다면 큰 것 중에서 가장 작은 값을 갖는 브랜치 로우에 있는 dba로 이동한다.

    리프 블록을 찾을 때까지 2의 단계를 반복해서 수행한다.

    리프 블록에서 주어진 값을 가진 키를 찾아 존재하면 ROWID를 이용해 테이블을 액세스하고 그렇지 않으면 ‘No Data Found’로 결과를 리턴한다.

$궁금증

-      해시 클러스터링과 리버스 키 인덱스는 둘 다 ‘=’로 검색하는데 효율적이다.(아니 ‘=’로만 검색할 수 있고 범위 검색은 거의 무용지물이라 할 수 있다그렇다면 이 둘의 차이는 무엇일까?

알려진 대로 해시 클러스터링은 코드성 테이블이나 우편번호 같은 데 유용하다.