希望对你有所帮助^^
创建基于函数的索引
基于函数的索引有助于对函数或表达式返回的值进行限定的查询。函数或表达式的值已预先计算并存储在索引中。
除了创建常规索引的先决条件外,如果索引基于用户定义的函数,则这些函数必须标记为 DETERMINISTIC。此外,如果这些函数由其他用户拥有,您只需对基于函数的索引中使用的任何用户定义函数拥有 EXECUTE 对象权限。
另外,使用基于函数的索引:
创建索引后必须对表进行分析。
必须保证查询不需要索引表达式中的任何 NULL 值,因为 NULL 值不存储在索引中。
注意:
CREATE INDEX 存储基于函数的索引中使用的最新函数的时间戳。验证索引时会更新此时间戳。在对基于函数的索引执行表空间时间点恢复时,如果索引中使用的最新函数的时间戳比存储在索引中的时间戳更新,则该索引被标记为无效。您必须使用 ANALYZE INDEX...VALIDATE STRUCTURE 语句来验证该索引。
为了说明基于函数的索引,请考虑以下语句,该语句定义了在函数 area(geo) 上定义的基于函数的索引 (area_index):
CREATE INDEX area_index ON rivers (area(geo));
在下面的 SQL 语句中,当 WHERE 子句中引用 area(geo) 时,优化器会考虑使用索引 area_index。
SELECT id, geo, area(geo), desc
FROM rivers
WHERE Area(geo) >5000;
表所有者应该对基于函数的索引中使用的函数具有 EXECUTE 权限。
因为基于函数的索引依赖于它正在使用的任何函数,所以当函数更改时它可能会失效。如果函数有效,您可以使用 ALTER INDEX...ENABLE 语句启用已禁用的基于函数的索引。 ALTER INDEX...DISABLE 语句允许您禁用基于函数的索引。如果您正在处理函数的主体,请考虑这样做