ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 物化视图的查询重写(2)-验证查询重写

物化视图的查询重写(2)-验证查询重写

原创 Linux操作系统 作者:高亚娟 时间:2013-03-06 09:17:05 0 删除 编辑
(0)前期
参照物化视图的查询重写(1)--http://space.itpub.net/28559081/viewspace-755285,已经启用了所有需要的参数。
(1)环境准备

21:06:39 SYS@ENMOEDU > conn elaine/oracle

Connected.


21:06:56 ELAINE@ENMOEDU > create table test

21:07:21   2  as

21:07:23   3  select d.file_name,d.file_id,d.TABLESPACE_NAME

21:07:25   4  from dba_data_files d,dba_tablespaces t

21:07:32   5  where d.TABLESPACE_NAME=t.TABLESPACE_NAME;

Table created.


21:07:32 ELAINE@ENMOEDU > select * from test;

FILE_NAME                                                     FILE_ID TABLESPACE_NAME

----------------------------------------------------- ---- ----------

/u01/app/oracle/oradata/ENMO/ENMOEDU/users01.dbf            4 USERS

/u01/app/oracle/oradata/ENMO/ENMOEDU/undotbs01.dbf          3 UNDOTBS1

/u01/app/oracle/oradata/ENMO/ENMOEDU/sysaux01.dbf           2 SYSAUX

/u01/app/oracle/oradata/ENMO/ENMOEDU/system01.dbf           1 SYSTEM

 

21:10:39 ELAINE@ENMOEDU > create materialized view test_mv

21:10:46   2  enable query rewrite as

21:10:51   3  select file_name,tablespace_name from test;

Materialized view created.

创建了一个物化视图test_mv,里面含有test表的file_name,tablespace_name两列。


(2)使用explain plan

21:10:56 ELAINE@ENMOEDU > explain plan for

21:11:53   2  select file_name,tablespace_name from test;

Explained.

 

21:12:03 ELAINE@ENMOEDU > select operation,object_name from plan_table;

OPERATION                      OBJECT_NAME

------------------------------ ------------------------------

SELECT STATEMENT

MAT_VIEW REWRITE ACCESS        TEST_MV


经验证(1):在执行select file_name,tablespace_name from test;语句时,Oracle使用了物化视图TEST_MV进行查询重写。

21:13:05 ELAINE@ENMOEDU > explain plan for

21:13:20   2  select file_name,file_id,tablespace_name from test;

Explained.


21:13:44 ELAINE@ENMOEDU > select operation,object_name from plan_table;

OPERATION                      OBJECT_NAME

------------------------------ ------------------------------

SELECT STATEMENT

MAT_VIEW REWRITE ACCESS        TEST_MV

SELECT STATEMENT

TABLE ACCESS                   TEST

经验证(2):在执行select file_name,file_id,tablespace_name from test;语句时,Oracle没有查询重写。

为什么没有进行重写?怎么样才能使用查询重写的功能?

    可以使用DBMS_MVIEW.EXPLAIN_REWRITE进行查看。


(3)创建REWRITE_TABLE

21:24:18 SYS@ENMOEDU > @?/rdbms/admin/utlxrw.sql

Table created.


(4)使用DBMS_MVIEW.EXPLAIN_REWRITE

21:25:18 ELAINE@ENMOEDU > exec DBMS_MVIEW.EXPLAIN_REWRITE ('select file_name,file_id,tablespace_name from test');

PL/SQL procedure successfully completed.


21:26:18 ELAINE@ENMOEDU > SELECT message FROM rewrite_table ORDER BY sequence;

MESSAGE

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

QSM-01150: query did not rewrite

QSM-01082: Joining materialized view, TEST_MV, with table, TEST, not possible

QSM-01102: materialized view, TEST_MV, requires join back to table, TEST, on column, FILE_ID


接下来可以顺便查看一下:执行语句select file_name,tablespace_name from test;时发生了查询重写,为什么会使用查询重写?也可以使用DBMS_MVIEW.EXPLAIN_REWRITE找到相应的信息。

21:26:36 ELAINE@ENMOEDU > exec DBMS_MVIEW.EXPLAIN_REWRITE ('select file_name,tablespace_name from test');

PL/SQL procedure successfully completed.

 

21:27:28 ELAINE@ENMOEDU > SELECT message FROM rewrite_table ORDER BY sequence; 

MESSAGE

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

QSM-01150: query did not rewrite

QSM-01151: query was rewritten

QSM-01082: Joining materialized view, TEST_MV, with table, TEST, not possible

QSM-01209: query rewritten with materialized view, TEST_MV, using text match algorithm

QSM-01102: materialized view, TEST_MV, requires join back to table, TEST, on column, FILE_ID

注(1):QSM-01209的意思是,Oracle使用文本匹配语法发现,要查询的语句与物化视图TEST_MV是相符合的,所以进行了语句重写。

注(2):可以使用rewrite_table;里面的其他字段得到对应的信息。


(5)当SQL语句涉及数据字典时,不能重写。

21:29:06 ELAINE@ENMOEDU > conn / as sysdba

Connected.

create materialized view test_sys

as

select d.file_name,d.file_id,d.TABLESPACE_NAME

from dba_data_files d,dba_tablespaces t

21:32:42   5  where d.TABLESPACE_NAME=t.TABLESPACE_NAME;

Materialized view created.


21:32:43 SYS@ENMOEDU > exec DBMS_MVIEW.EXPLAIN_REWRITE ('select d.file_name,d.file_id,d.TABLESPACE_NAME from dba_data_files d,dba_tablespaces t where d.TABLESPACE_NAME=t.TABLESPACE_NAME');

PL/SQL procedure successfully completed.


21:34:21 SYS@ENMOEDU > select message from rewrite_table;

MESSAGE

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

QSM-01150: query did not rewrite

QSM-01263: query rewrite not possible when query references a dictionary table or view


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28559081/viewspace-755341/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-01-23

  • 博文量
    3
  • 访问量
    3643