数据库版本:9i
SQL文:(非实际SQL,举例说明)
SELECT * FROM TBL_A T
WHERE P_COM.FUN(T.COLA.T.COLB) = 20110101注:P_COM.FUN()是一个自定义函数,定义在Package中。使用了DETERMINISTIC声明。索引和表已经ANALYZE过。在一个DB服务器中,函数索引被正确使用,所以代码上没有问题。
但是在另一个DB服务器中,做的总是全表扫描。声明指定索引也没用(SELECT /*+INDEX。略)。
怀疑是什么地方设置有问题。会是什么原因呢?求助。
SQL文:(非实际SQL,举例说明)
SELECT * FROM TBL_A T
WHERE P_COM.FUN(T.COLA.T.COLB) = 20110101注:P_COM.FUN()是一个自定义函数,定义在Package中。使用了DETERMINISTIC声明。索引和表已经ANALYZE过。在一个DB服务器中,函数索引被正确使用,所以代码上没有问题。
但是在另一个DB服务器中,做的总是全表扫描。声明指定索引也没用(SELECT /*+INDEX。略)。
怀疑是什么地方设置有问题。会是什么原因呢?求助。
解决方案 »
- 一张表内两行数据中的同字段文本文件之间的比较
- TRUNC怎么用
- java程序连接ORACLE 10g 数据库时发生错误
- 请教一个查询
- SQL PLUS相对路径怎么用
- Oracle DB 与 eMule VeryCD
- 我修改字段类型的时候,提示说该字段数据必须为空,如何解决?
- oracle 安装错误 ora-03113:通信通道的文件结束 在线等 急急!!
- 抢分了 ! 如何通过SQL语句得到类似于Listener.log文件中的信息 , 包括登入用户名, 登入program ,ip , pc机器名 , 登入时间 ,所做的动作(s
- 高分,如何在循环中跳出?
- ORA-03113: 通信通道的文件结束 求助!!!
- oracle where 条件执行顺序。
需要修改初始化参数
query_rewrite_enabled=true
query_rewrite_integrity=trusted
必须有系统权限QUERY REWRITE,从而在你自己的模式中的表上创建基于函数的索引。
必须有系统权限GLOBAL QUERY REWRITE,从而在其他模式中的表上创建基于函数的索引。
要让优化器使用基于函数的索引,必须设置以下会话或系统变量:QUERY_REWRITE_ENABLED=TRUE和QUERY_REWRITE_INTEGRITY=TRUSTED。
对于9ir2及以上版本,则不受上述限制。