Index & B-Tree
RDB 인덱스의 자료구조는 다음과 같이 세 가지로 분류할 수 있습니다.
- B-tree 인덱스
- 비트맵 인덱스
- 해시 인덱스
DB에서 인덱스라고 말하면 대부분 B-Tree 인덱스를 지칭하는 것입니다. 실제로 CREATE INDEX 구문을 실행하면 기본값으로 B-Tree 인덱스가 생성됩니다.
검색 알고리즘으로서는 성능이 뛰어나게 좋진 않다.
B-Tree를 고안했던 사람 중 한 명인 R.Bayer도 만약 데이터가 변화하지 않는다면 다른 인덱스 기술로도 B-Tree와 비슷한 성능을 낼 수 있을 것이다. 라고 말한 적 있습니다.
B-Tree의 수정버전
대부분의 DB에서는 트리의 리프 노드에만 키값을 저장하는 B+Tree라는 수정버전을 사용합니다. (Oracle, PostgreSQL, MySQL) B-Tree보다 검색에 있어서 효율적으로 만든 알고리즘입니다.
B+Tree가 검색성능이 뛰어난 이유는 몇가지 있습니다. 첫째, B+Tree는 루트와 리프의 거리를 가능한한 일정하게 유지하려합니다. 또한 트리의 깊이도 대개 3~4 정도의수준으로 일정합니다. 데이터 또한 정렬상태를 유지하기 때문에 이분탐색을 적용할 수 있습니다.
비트 인덱스는 데이터를 비트 플래그로 변환하여 저장하는 형태의 인덱스입니다. 카디널리티가 낮은 필드에 대해 효과를 발휘합니다. 하지만 갱신 시의 오버헤드가 크기 때문에 빈번한 갱신이 일어나지 않는 BI/DWH 용도로 사용합니다.
BI/DWH
DWH(Data Warehouse)는 데이터를 수집, 정제, 저장하는 역할을 하며, BI(Business Intelligence)는 DWH에 저장된 데이터를 분석하고 시각화하여 비즈니스 인사이트를 제공합니다.
키를 분산하여 등가 검색을 고속으로 실행하고자 만들어진 인덱스입니다. 등가 검색외 이점이 별로 없고, 범위 검색이 불가능합니다. 지원하는 DBMS로는 PostgreSQL과 Oracle의 Reverse Index 기능이 있습니다. 효과가 거의 없고 지원하는 DBMS마저 적어서 거의 사용할 일이 없습니다.