服务器 频道

函数索引的结构分析

  【IT168 服务器学院】函数索引
  
  基于函数的索引也是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索引)
0
相关文章