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

来源:互联网 发布:怎么提高阅读速度 知乎 编辑:程序博客网 时间:2024/06/05 10:08

为什么  物化视图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 rewriteQSM-01082: Joining materialized view, PMARKER_MV, with table, A_LIST, not possibleQSM-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


原创粉丝点击