首页 > 开发 > 综合 > 正文

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

2024-07-21 02:33:44
字体:
来源:转载
供稿:网友
  函数索引  基于函数的索引也是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
----------------------------------------------------------
   0  SELECT 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
----------------------------------------------------------
   0  SELECT 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索引)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表