Oracle普通视图和实体化视图比较
Oracle普通视图和实体化视图比较相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理空间。实体化视图的结果会保存在一个普通的数据表中,在对实体化视图进行查询的时候不再会对创建实体化视图的基表进行查询,而是直接查询实体化视图对应的结果表,然后通过定期的刷新机制来更新MView表中的数据。首先我们需要创建表,然后写一个 SELECT 语句 。SQL> create table xjzhang_table1 (a varchar2(10),b number(10));表已创建。SQL> create table xjzhang_table2 (a varchar2(10),b number(10));表已创建。向两张表中插入数据SQL> insert into xjzhang_table1 values ('aaa','00001');已创建 1 行。SQL> insert into xjzhang_table1 values ('bbb','00002');已创建 1 行。SQL> insert into xjzhang_table2 values ('aa1','00002');已创建 1 行。SQL> insert into xjzhang_table2 values ('bb1','00003');已创建 1 行。SQL> commit;提交完成。然后我们创建一个视图,视图的名称为xjzhang_viewSQL> create view xjzhang_view as select xjzhang_table1.a,xjzhang_table2.b from xjzhang_table1,xjzhang_table2 where xjzhang_table1.b=xjzhang_table2.b;视图已创建。然后我们查询视图SQL> select * from xjzhang_view;A B---------- ----------bbb 2然后我们写一个 查询语句SQL> select xjzhang_table1.a,xjzhang_table2.b from xjzhang_table1,xjzhang_table2 where xjzhang_table1.b=xjzhang_table2.b;A B---------- ----------bbb 2可以看到我们查询视图的结果和查询那个SELECT语句的结果是一致的,说明视图是查询一个 或者多个表的 SELECT 语句的描述。查询一下我们创建的视图select object_name,object_type,created,status from dba_objects whereobject_name='XJZHANG_VIEW';OBJECT_NAME OBJECT_TYPE CREATED STATUS--------------- ------------------- -------------- ------- XJZHANG_VIEW VIEW 24-6月 -09 VALID同样我们先创建 一张表表名为 xjzhang_table3同时对表插入数据SQL> create table xjzhang_table3 (a varchar2(10),b number(5));表已创建。SQL> insert into xjzhang_table3 values ('aaa','00001');已创建 1 行。SQL> insert into xjzhang_table3 values ('bbb','00002');已创建 1 行。SQL> commit;提交完成。下面我们开始创建实体视图 (这里 我们创建的实体视图 不是自动刷新 而是需要手动去刷新)SQL> create materialized view xjzhang_mat_view as select * from xjzhang_table3;实体化视图已创建。我们查询一下我们创建的实体视图,实体视图的名称为 xjzhang_mat_viewSQL> select * from xjzhang_mat_view;A B---------- ----------aaa 1bbb 2实体视图从某种意义上说是一张物理表可以通过 DBA_TABLES 进行查询来论证一下SQL>select TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where table_name='XJZHANG_MAT_VIEW';TABLE_NAME TABLESPACE_NAME STATUS------------------------------ ------------------------------ --------XJZHANG_MAT_VIEW SYSTEM VALID我们来查询一下刚才创建的 视图 xjzhang_viewSQL> select TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where table_name='XJZHANG_VIEW';未选定行可以看出普通视图在DBA_TABLES 中 是没有记录的,也没有对应的表空间实体视图会占用一定的存储空间,因为它存放了查询的结果集,那么它也是一种段,可以在DBA_SEGMENTS 中查询出SQL> select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME from dba_segments where segment_name='XJZHANG_MAT_VIEW';SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME-------------------- ------------------ ------------------------------XJZHANG_MAT_VIEW TABLE SYSTEM同样我们通过 DBA_SEGMENTS 来查询一下我们创建的普通视图SQL> select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME from dba_segments where segment_name='XJZHANG_VIEW';未选定行可以看出普通视图是不被记录在 DBA_SEGMENTS 中的。下面我们更新一下XJZHANG_TABLE3 表中的信息,看一下 实体视图的变化信息SQL> insert into xjzhang_table3 values ('ccc','00003');已创建 1 行。SQL> commit;提交完成。查询该表的信息SQL> select * from xjzhang_table3;A B---------- ----------aaa 1bbb 2ccc 3表的记录增加了一行我们再来查询实体视图的信息SQL> select * from xjzhang_mat_view;A B---------- ----------aaa 1bbb 2可以看出实体视图的信息没有发生变化,因为我们在创建实体视图的时候,我们没有指定该视图的刷新方法和刷新模式,所以创建完该实体视图,该视图默认的刷新方法和刷新模式为 FORCE DEMAND我们可以通过 dba_mviews 这个视图查询我们创建的实体视图的信息SQL> select a.mview_name,a.refresh_mode,a.refresh_method from dba_mviews a where a.mview_name='XJZHANG_MAT_VIEW';MVIEW_NAME REFRESH_MODE REFRESH_METHOD------------------------------ -------------- --------------XJZHANG_MAT_VIEW DEMAND FORCE这里默认的是手工刷新,所以在这里我们对实体视图进行更新SQL> EXEC DBMS_MVIEW.REFRESH('XJZHANG_MAT_VIEW')PL/SQL 过程已成功完成。然后我们再次查询该实体视图SQL> SELECT * FROM XJZHANG_MAT_VIEW;A B-------上一个:Oracle实体化视图
下一个:Oralce索引聚簇因子
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?