物化视图与一般视图有何区别?

如题所述

区别是:定义不同、内容不同、刷新方法不同。

具体内容如下:

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

    普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。

    物化视图的类型:二者的区别在于刷新方法的不同,仅在该物化视图需要被刷新了,才进行刷新,即更新物化视图,以保证和基表数据的一致性;而是说,一旦基表有了,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

    物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

    物化视图在某种意义上说就是一个物理表,这通过其可以被查询出来,而得到佐证;物化视图也是一种段,所以其有自己的物理存储属性; 物化视图会占用数据库磁盘空间。

    在一般视图中,可看到文档的大部分(包括部分图形)内容,但看不见页眉、页脚、页码等,也不能编辑这些内容,不能显示图文内容、分栏效果等。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-31
物化视图是一种特殊的物理表,

物化
”(Materialized)
视图是相对普通视图而言的。普通
视图是虚拟表,应用的局限性大,任何对视图的查询,
Oracle
都实际上转换为视图
SQL

句的查询。这样对整体查询性能的提高,并没有实质上的好处。

1
、物化视图的类型:
ON DEMAND

ON COMMIT

二者的区别在于刷新方法的不同,
ON DEMAND
顾名思义,仅在该物化视图

需要

被刷
新了,才进行刷新
(REFRESH)
,即更新物化视图,以保证和基表数据的一致性;而
ON
COMMIT
是说,一旦基表有了
COMMIT
,即事务提交,则立刻刷新,立刻更新物化视图,
使得数据和基表一致。

2

ON DEMAND
物化视图

物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统
而言。但
Oracle
允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉
及到默认值问题。也就是说
Oracle
给物化视图的重要定义参数的默认值处理是我们需要特
别注意的。

物化视图的特点:

(1)
物化视图在某种意义上说就是一个物理表
(
而且不仅仅是一个物理表
)

这通过其可以

user_tables
查询出来,而得到佐证;

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

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

创建语句:
create materialized view mv_name as select * from table_name

默认情况下,
如果没指定刷新方法和刷新模式,

Oracle
默认为
FORCE

DEMAND


物化视图的数据怎么随着基表而更新?

Oracle
提供了两种方式,手工刷新和自动刷新,默认为手工刷新。也就是说,通过我们
手工的执行某个
Oracle
提供的系统级存储过程或包,来保证物化视图与基表数据一致性。
这是最基本的刷新办法了。自动刷新,其实也就是
Oracle
会建立一个
job
,通过这个
job

调用相同的存储过程或包,加以实现。

ON DEMAND
物化视图的特性及其和
ON COMMIT
物化视图的区别,即前者不刷新
(

工或自动
)
就不更新物化视图,而后者不刷新也会更新物化视图,
——
只要基表发生了
COMMIT


创建定时刷新的物化视图:
create materialized view mv_name refresh force on demand
start with sysdate

next sysdate+1
(指定物化视图每天刷新一次)

上述创建的物化视图每天刷新,但是没有指定刷新时间,如果要指定刷新时间(比如每
天晚上
10

00
定时刷新一次)

create materialized view mv_name refresh force on demand
start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),'
22:00:00'),'dd-mm-yyyy hh24:mi:ss')

3

ON COMMIT
物化视图

ON COMMIT
物化视图的创建,和上面创建
ON DEMAND
的物化视图区别不大。因为
ON DEMAND
是默认的,所以
ON COMMIT
物化视图,需要再增加个参数即可。
相似回答