orcle 物化视图

来源:互联网 发布:联通网络解锁助手 编辑:程序博客网 时间:2024/05/01 05:40

物化视图是一种特殊的物理表,物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。

ON DEMANDON COMMIT物化视图的区别在于其刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图需要被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。创建物化视图时未作指定,则OracleON DEMAND模式来创建。

1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;

  2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;

  3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证。

--获取数据库rdbms版本信息  

select * from v$version;

CREATE TABLE T (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30));

--创建on demand的物化视图:

CREATE MATERIALIZED VIEW MV_TONDEMAND refresh force on demand AS SELECT * FROM T;

--分析物化视图,以获得统计信息 

Analyze  table  MV_TONDEMAND  compute statistics;

--删除物化视图

drop materialized view MV_TONDEMAND;

--user_mviews查看物化视图关键定义

select mv.* from user_mviews mv where mv.MVIEW_NAME = 'MV_TONDEMAND';  --请注意大小写,当在引号中查询时一定为大写的,这是oracle默认的,否则查询不出来的。

--user_tables查询物化视图

select * from user_tables where table_name='MV_TONDEMAND'; --请注意大小写,当在引号中查询时一定为大写的,这是oracle默认的,否则查询不出来的。

--查看物化视图的存储参数

select sg.segment_name,sg.bytes,sg.blocks from user_segments sg where sg.segment_name='MV_TONDEMAND';

--插入一条数据

INSERT INTO T VALUES (3, 'myname3');

--手动刷新物化视图

EXEC DBMS_MVIEW.REFRESH('MV_TONDEMAND');

--查询on demand视图

select * from MV_TOnDemand;

--创建on commit的物化视图:

CREATE MATERIALIZED VIEW MV_TOnCommit refresh force on commit AS SELECT * FROM T;

--插入一条数据

INSERT INTO T VALUES (4, 'myname4');

Commit;

--查询on commit视图

select * from MV_TOnCommit;