各种索引的结构分析 函数索引

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

函数索引

基于函数的索引也是8i以来的新产物,它有索引计算列的能力,它易于使用并且提供计算好的值,在不修改应用程序的逻辑上提高了查询性能。使用基于函数的索引有几个先决条件:

(1)必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其他模式下)权限。

(2)必须使用基于成本的优化器,基于规则的优化器将被忽略。

(3)必须设置以下两个系统参数:

QUERY_REWRITE_ENABLED=TRUE

QUERY_REWRITE_INTEGRITY=TRUSTED

可以通过alter system set,alter session set在系统级或线程级设置,也可以通过在init.ora添加实现。

这里举一个基于函数的索引的例子:

SQL> create index test.ind_fun on test.testindex(upper(a));

索引已创建。

SQL> insert into testindex values('a',2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select /*+ RULE*/* FROM test.testindex where upper(a)='A';

A B

-- ----------

a 2

Execution Plan

----------------------------------------------------------

0SELECT STATEMENT Optimizer=HINT: RULE

1 0 TABLE Access (FULL) OF 'TESTINDEX'

(优化器选择了全表扫描)

--------------------------------------------------------------------

SQL> select * FROM test.testindex where upper(a)='A';

A B

-- ----------

a 2

Execution Plan

----------------------------------------------------------

0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=5)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TESTINDEX' (Cost=2 Card=

1 Bytes=5)

2 1 INDEX (RANGE SCAN) OF 'IND_FUN' (NON-UNIQUE) (Cost=1 Car

d=1)(使用了ind_fun索引)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有