应用域索引(application domain index)即Oracle所谓的可扩展索引(extensible indexing)。利用应用域索引,你可以创建自己的索引结构,使之像Oracle提供的索引一样工作。有人使用你的索引类型发出一个CREATE INDEX语句时,Oracle会运行你的代码来生成这个索引。如果有人分析索引来计算统计信息,Oracle会执行你的代码来生成统计信息(采用你要求的存储格式)。Oracle解析查询并开发查询计划时,如果查询计划中可能使用你的索引,Oracle会问你:这个函数的计算不同的计划时会有怎样的开销。简单地说,利用应用域索引,你能实现数据库中原本没有的一个新的索引类型。例如,如果你开发一个软件来分析数据库中存储的图像,而且生成了关于图像的信息(如图像中的颜色),就可以创建你自己的图像(image)索引。向数据库中增加图象时,会调用你的代码,从图像中抽取颜色,并将其存储在某个地方(你想存储图像索引的任何地方)。查询时,用户请求所有“蓝色图像”时,Oracle就会在合适的时候从索引提供答案。
对此最好的例子是Oracle自己的文本索引(text index)。这个索引用于对大量的文本项提供关键字搜索。可以如下创建一个简单的文本索引:
scott@ORCL>create index myindex on t(year)
2 indextype is ctxsys.context
3 /
索引已创建。
这个索引的创建者向SQL语言中引入了一些文本运算符,接下来使用这些文本运算符:
create index myindex on mytable(docs)
indextype is ctxsys.context
/
这个索引的创建者向SQL语言中引入了一些文本运算符,接下来使用这些文本运算符:
select * from mytable where contains( docs, 'some words' ) > 0;
它甚至能对如下的命令做出响应:
begin
dbms_stats.gather_index_stats( user, 'MYINDEX' );
end;
/