使用函数的返回值作为索引键

函数型索引是对指定函数返回的值建立的索引,而非对列的值建立索引。例如,以下语句在将函数 Area( ) 返回的值作为键使用的表 zones 上创建函数型索引:
CREATE INDEX zone_func_ind ON zones (Area(length,width));

可在 SPL 例程中创建函数型索引。也可在不返回大对象的非变量用户定义的函数上创建索引。

函数型索引可以是 B-tree 索引、R-tree 索引或者用户定义的辅助存取方法。

函数返回的值可以是索引键,如上例所示,或者可以是其它键部分是列值、部分列值或者是其它函数索引的返回值的复合索引(有关更多信息,请参阅 创建复合索引)。

Important: 数据库服务器在定义函数型索引的用户定义例程(UDR)上施加以下限制:
  • 参数不能是集合数据类型(LIST 、MULTISET 或 SET)列的名称。
  • 此函数不能返回 BLOB 、BYTE 、CLOB 和 TEXT 数据类型的大对象。
  • 此函数不能是 VARIANT 函数。
  • 此函数不能包含任何 SQL 的 DML 语句。
  • 当您创建函数型索引时,ONLINE 关键字无效;请参阅 CREATE INDEX 的 ONLINE 关键字
  • 此函数必须是用户定义函数。您不能在任何 SQL 的内置函数上创建函数型索引。

然而,除了以上最后一条限制,您可以在调用非变量内置 SQL 函数的用户定义函数上创建函数型索引以,以致于内置函数返回的值是函数型索引的索引键。(即,创建调用并返回 SQL 内置函数的值的 SPL 包装器,然后在此用户定义的 SPL 函数上定义函数型索引。)