创建oracle的函数式的索引
在很多情况下,我们希望运用索引来提高效率,可是有时候在列上还得运用函数进行计算,这时如果直接在列上建立索引来使用,会发现索引无效。一般情况下,我们需要把函数等表达式写在等号的右边,如:sal>100*2.5而不是sal/2.5>100。然而有些情况下,我们不能这样处理,必须要使用函数进行计算,这时我们需要应用oracle的函数索引。
1.环境设置
设置启动参数/会话/系统级:
--告诉优化器信任程序员标记的确定性代码
QUERY_REWRITE_INTEGRITY must be set to TRUSTED
--允许优化器使用基于函数的索引重写查询
QUERY_REWRITE_ENABLED must be set to TRUE
COMPATIBLE must set to 8.1.0.0.0 or a greater value
操作如下:
以管理员登陆,sys/xxxx as sysdba
sql>show parameter QUERY_REWRITE_INTEGRITY ;
如果不是TRUSTED,
sql>alter system set Query_rewrite_integrity=trusted;
同样设置其它参数
alter system set query_rewrite_enabled=true;
2.创建函数索引
create index ind_char_xx on table (to_char(xx));
3.重新分析表 analyze
analyze table yyy compute statistics;
__________________
摘抄:
The table using function-based indexes must be analyzed and the optimizer mode set to CHOOSE or the function-based indexes will not be used. The RULE based optimizer cannot use function-based indexes.
在很多情况下,我们希望运用索引来提高效率,可是有时候在列上还得运用函数进行计算,这时如果直接在列上建立索引来使用,会发现索引无效。一般情况下,我们需要把函数等表达式写在等号的右边,如:sal>100*2.5而不是sal/2.5>100。然而有些情况下,我们不能这样处理,必须要使用函数进行计算,这时我们需要应用oracle的函数索引。
1.环境设置
设置启动参数/会话/系统级:
--告诉优化器信任程序员标记的确定性代码
QUERY_REWRITE_INTEGRITY must be set to TRUSTED
--允许优化器使用基于函数的索引重写查询
QUERY_REWRITE_ENABLED must be set to TRUE
COMPATIBLE must set to 8.1.0.0.0 or a greater value
操作如下:
以管理员登陆,sys/xxxx as sysdba
sql>show parameter QUERY_REWRITE_INTEGRITY ;
如果不是TRUSTED,
sql>alter system set Query_rewrite_integrity=trusted;
同样设置其它参数
alter system set query_rewrite_enabled=true;
2.创建函数索引
create index ind_char_xx on table (to_char(xx));
3.重新分析表 analyze
analyze table yyy compute statistics;
__________________
摘抄:
The table using function-based indexes must be analyzed and the optimizer mode set to CHOOSE or the function-based indexes will not be used. The RULE based optimizer cannot use function-based indexes.