为什么没有实施查询重写?

为什么 物化视图PCT特性(2) 没有实施查询重写?


运行admin/utlxrw.sql脚本创建REWRITE_TABLE表。

指定单个物化视图

DBMS_MVIEW.EXPLAIN_REWRITE ( query VARCHAR2, --要解释的sql语句 mv VARCHAR2(30), --全限定物化视图名称(schema.mv),不指定为schema代表当前schema statement_id VARCHAR2(30));--客户端提供的用于区分输出信息的唯一标识

指定多个物化视图

DBMS_MVIEW.EXPLAIN_REWRITE(query, 'mv1, mv2, mv3') --mv1,mv2,mv3为多个物化视图

使用DBMS_MVIEW.EXPLAIN_REWRITE,对sql进行解释,但并没有真正的执行。

SQL> DECLARE 2 qrytext VARCHAR2(500) :='select t2.name, sum(t1.value) from a_list t1,b t2 3 where t1.id=t2.id and t1.type=''a'' 4 group by t2.name'; 5 idno VARCHAR2(30) :='ID1'; 6 BEGIN 7 DBMS_MVIEW.EXPLAIN_REWRITE(qrytext, 'PMARKER_MV', idno); 8 END; 9 / PL/SQL 过程已成功完成。 SQL> SELECT message FROM rewrite_table ORDER BY sequence; MESSAGE ------------------------------------------------------------------------------------------------------------------------ QSM-01150: query did not rewrite QSM-01082: Joining materialized view, PMARKER_MV, with table, A_LIST, not possible QSM-01102: materialized view, PMARKER_MV, requires join back to table, A_LIST, on column, TYPE
oracle要回表去找type字段信息,因此不能重写。设想使用pmarker的pct特性:如果两表中的分区表的分区键为连接字段,而在这时使用分区键做为谓词条件进行查询,则生效(此时 group by子句中的确不包含分区键)。


参考:

http://docs.oracle.com/cd/B19306_01/server.102/b14223/qradv.htm#sthref1495


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值