语法:
1,创建函数索引
SQL> create index i_fun on test3(lower(dname)) ;
Index created.
SQL> select INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES
---------- ------------------------------ ---------- ---------
I_REV NORMAL/REV TEST3 NONUNIQUE
I_FUN FUNCTION-BASED NORMAL TEST3 NONUNIQUE
PK_DEPT NORMAL DEPT UNIQUE
SQL> explain plan for
2 select deptno,dname,loc
3 from test3
4 where lower(dname)='SALES';
Explained.
SQL> select id,operation,options,object_name,position from plan_table;
ID OPERATION OPTIONS OBJECT_NAME POSITION
---- -------------------- --------------- ------------------------- ----------
0 SELECT STATEMENT 2
1 TABLE ACCESS BY INDEX ROWID TEST3 1
2 INDEX RANGE SCAN I_FUN 1
问题:尽管8i就引入了函数索引,但在10g之前的版本中,默认是不使用函数索引的,所以以前都是加hints来强迫CBO来走函数
索引,所以要写很多这样的语句很麻烦,例如:select /*+ index (I_FUN)*/ from ...........
1g只要设置query_rewrite_enabled 这参数,CBO就认了,而且默认是打开的
SQL> show parameter query_rewrite_enabled
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
query_rewrite_enabled string TRUE
修改query_rewrite_enabled命令:
修改全局级别的:alter system set query_rewrite_enabled = true;
修改会话级别的:alter session set query_rewrite_enabled = true;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26465805/viewspace-712651/
,如需转载,请注明出处,否则将追究法律责任。