1.개요
B*Tree 인덱스에 대한 연구가 발표되면서 대부분의 RDBMS에서는 B*Tree 인덱스를 주
인덱싱 기법으로 도입하기 시작하였다. B*Tree는 과거 어느 Tree 구조보다 대용량RDBMS에 적합한 구조를 가지고 있어
많은 사용자를 확보하게 된다. 이러한 B*Tree 인덱스는 많은 장점에도 불구하고 일부 단점으로 인하여 사용자들은 새로운 인덱스의
출현을 지속적으로 요구하게 되었다.
BITMAP index, Reverse Index 그리고 Function based
Index는 B*Tree Index의 단점을 보완하기 위해 만들어진 Index들이다. 그러나 이러한 인덱스들은 특수한 목적을
가지고 만들어진 인덱스이므로 B*Tree 인덱스의 단점을 어느 정도 보완할 수 있을지 몰라도 사용자에 대한 새로운 인덱스의 요구를
종식시킬 수는 없었다.
가능한 모든 종류의 인덱스를 만들 수는 없지만 사용자가 원하는 형태의 인덱스를 스스로 만들 수
있다면 모든 종류의 인덱스를 만들지 않고도 우리가 원하는 목적을 달성할 수 있을 것이다. 이러한 목적을 가지고 탄생한 것이
DOMAIN index 다.
DOMAIN Index는 오라클8i에서부터 새롭게 도입된 개념으로 개발자가 자신이 원하는
인덱스 타입을 생성할 수 있게 함으로써 오라클의 인덱스 시스템에 많은 확장을 가져다 주었다.
즉, 데이터베이스에는 아직 존재하지도 않는 새로운 인덱스 타입을 자신이 스스로 정의하여
오라클에서 지원하는 인덱스 처럼 사용할 수가 있다는 것이다. 현재 오라클에서 사용하고 있는 Domain index의 좋은 사례로는
interMedia text index 나 오라클 9i부터 지원되는 Context 타입 인덱스와 Catalog 타입 인덱스등으로
모두 비정형 Text를 빠르게 검색하게 위해 도입되었다.
2. Extensible indexing framework
Domain index는 다음과 같은 네가지 구성요소로 이루어져 있다.
1) Indextype
Schema object indextype는 인덱스의 정의, 관리, 스캔등 새로운 인덱스
타입이 가질수 있는 모든 경향을 관리할 수 있는 루틴을 캡술화 하여 사용자가 보다 쉽게 사용자 정의 인덱스를 생성할 수 있게
한다.
2) Domain index
도메인 인덱스는 인덱스 타입에서 제공되는 루틴에 의하여 생성, 관리, 액세스 되는 인덱스의 한
종류로 application-specific domains에 대한 데이터를 indexing하는데 사용하기 때문에 domain
index라고 한다.
3) Operators
이전의 관계형 데이터베이스에서는 내부 정의 Operator를 효과적으로 적용하기 위해
B*TREE 인덱스를 사용하였다.
그러나 기존의 B*Tree 인덱스는 일부 데이터 타입(숫자, 문자열)에 대하여만 인덱스를
생성할 수 있어 다른 데이터 타입(Text, spatial, image, video and audio)에 대하여 새로운 특화된
인덱스 기법을 필요하게 되었다. 이렇게 하여 탄생한 것이 사용자 정의 도메인 인덱스다.
사용자 정의 도메인 인덱스도 기존 인덱스처럼 인덱스를 검색하기 위한 사용자 정의
Operator를 가지게 되는데, 이 사용자 정의 Operator는 사용자 정의 도메인 인덱스를 검색하기 위한 함수로
indextype 정의시에 정의된다.
4) Index-organized table
사용자 정의 도메인 인덱스의 자기 자신의 물리적 구조에 정보는 데이터베이스 내부에 IOT로
저장되거나 외부 파일로 저장이 된다
<example>
Oracle text 에서 지원하는 도메인 인덱스에 대한 예제