`
lee79
  • 浏览: 106274 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

普通视图与物化视图的区别(转)

阅读更多

物化视图是一种特殊的物理表,“物化”(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。

ON 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物化视图,需要再增加个参数即可。

需要注意的是,无法在定义时仅指定ON COMMIT,还得附带个参数才行。
创建ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name
备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014)

4、物化视图的刷新
刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。
刷新的模式有两种:ON DEMAND和ON COMMIT。 (如上所述)
刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。 FAST 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE 刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采 用COMPLETE的方式。NEVER指物化视图不进行任何刷新。
对于已经创建好的物化视图,可以修改其刷新方式,比如把物化视图mv_name的刷新方式修改为每天晚上10点刷新一次:alter 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’)

5、物化视图具有表一样的特征,所以可以像对表一样,我们可以为它创建索引,创建方法和对表一样。

6、物化视图的删除:
虽然物化视图是和表一起管理的,但是在经常使用的PLSQL工具中,并不能用删除表的方式来删除(在表上右键选择‘drop’并不能删除物化视图),可以使用语句来实现:drop materialized view mv_name

普通视图和物化视图的区别

答曰:普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转 换为对应的定义 SQL去查询,而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。
普通视图的三个特征:
1、 是简化设计, 清晰编码的东西,他并不是提高性能的,他的存在只会降低性能(如一个视图7个表关联,另一个视图8个表,程序员不知道,觉得很方便,把两个视图关联再做一个视图,那就惨了),他的存在未了在设计上的方便性
2、其次,是安全 ,在授权给其他用户或者查看角度,多个表关联只允许查看,不允许修改,单表也可以同WITH READ ONLY来控制,当然有些项目基于视图做面向对象的开发,即在视图上去做INSTAND OF触发器,就我个人而言是不站同的,虽然开发上方便,但是未必是好事。
3、从不同的角度看不同的维度 , 视图可以划分维度和权限,并使多个维度的综合,也就是你要什么就可以从不同的角度看,而表是一个实体的而已,一般维度较少(如:人员表和身份表关联,从人 员表可以查看人员的维度统计,从身份看,可以看不同种类的身份有那些人或者多少人),其次另一个如系统视图USER_TABLE、TAB、 USER_OBJECTS这些视图,不同的用户下看到的肯定是不一样的,看的是自己的东西。

物化视图呢,用于OLAP系统中,当然部分 OLTP系统的小部分功能未了提高性能会借鉴一点点,因为表关联的开销很大,所以在开发中很多人就像把这个代价交给定期转存来完成,ORACLE当然也提 供了这个功能,就是将视图(或者一个大SQL)的信息转换为物理数据存储,然后提供不同的策略:定时刷还是及时刷、增量刷还是全局刷等等可以根据实际情况 进行选择,总之你插的是表,不是视图。

分享到:
评论

相关推荐

    物化视图普通视图区别,很不错的资料

    物化视图与普通视图是数据库中两种不同的视图类型,它们在功能和使用上有显著的区别。普通视图,也称为虚拟视图,是一种逻辑上的表,它并不实际存储数据,而是根据定义的SQL查询在运行时动态生成结果。这意味着每次...

    Oracle物化视图应用详解

    物化视图与索引有类似之处,都是为了提升查询效率,但物化视图更侧重于计算结果的存储。同时,物化视图对应用程序透明,不影响SQL语句的正确性。然而,它们需要额外的存储空间,并且需要定期维护以保持与基表同步。 ...

    物化视图创建脚本物化视图创建脚本

    物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建物化视图创建

    oracle物化视图_循序渐进学习笔记

    Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表数据生成结果,而物化视图则拥有自己的物理存储,提供了对数据的快速访问。在本篇循序渐...

    PostgreSQL物化视图的刷新机制.pptx

    物化视图可以分为四种类型:快照物化视图、积极物化视图、消极物化视图和非常消极物化视图。 为什么使用物化视图?在执行某些查询时,效率较低,传统方法(例如,索引或查询优化)无法显著提高效率。这时使用的方法...

    ORACLE9I物化视图

    - **汇总汇总与聚合到所有**:在多层汇总的情况下,可以从下级物化视图向上级物化视图进行汇总。 - **数据子集**:如果查询只需要部分数据,则可以仅从物化视图中获取这部分数据。 - **查询重写完整性模式**:...

    Oracle数据库中物化视图的原理剖析

    Oracle数据库中的物化视图(Materialized View,简称MV)是一种强大的优化工具,它通过预先计算并存储查询结果,提供了一种快速访问复杂查询数据的方式。这种技术在数据仓库环境中尤其有用,因为数据仓库通常涉及...

    MySQL中实现物化视图

    真正值得一看的mysql知识。MySQL中实现物化视图(中文版)翻译于外文。

    SQL 优化之 oracle物化视图

    Oracle 物化视图 Oracle 物化视图是数据库对象,存储远程表的数据副本,也可以称为快照。物化视图可以查询表、视图和其他物化视图。通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 创建...

    物化视图的快速刷新

    物化视图的快速刷新 物化视图是 Oracle 中的一种性能优化技术,它可以将复杂的查询结果存储在一个物化视图中,以便快速地检索数据。物化视图有三种刷新方式:COMPLETE、FAST 和 FORCE。 COMPLETE 刷新方式会删除表...

    Oracle物化视图创建和使用

    每种物化视图都有其快速刷新的限制条件,但其他方面则区别不大。 在学习 Oracle 物化视图时,需要了解物化视图的概念、创建和删除物化视图、设置自动刷新时间和日志等知识点。同时,也需要了解物化视图的优点和缺点...

    物化视图,数据仓库,Oracle

    与普通的视图不同,物化视图的数据被物理地存储在磁盘上,而不是每次查询时动态计算。这样可以显著提高查询性能,特别是在需要频繁执行相同或相似查询的情况下。 ##### 2.2 作用 - **提高查询性能**:通过预计算...

    oracle 物化视图详解(内含例子)

    与普通的视图不同,普通视图只是一种虚拟表,在执行查询时才动态地计算结果,而物化视图则是预计算的结果,存储在磁盘上。因此,物化视图的主要作用在于提高某些查询的性能,尤其是在需要频繁执行复杂的聚合查询的...

    Oracle物化视图使用[文].pdf

    物化视图与普通的视图不同,后者是逻辑上的虚表,其内容在查询时动态计算,而物化视图则是预先计算并存储在数据库中的实际数据表。 在Oracle数据库中,物化视图有两种刷新策略:ON DEMAND和ON COMMIT。ON DEMAND...

    物化视图创建

    物化视图创建

    表分区及物化视图

    orace表分区及物化视图 进一步了解oracle表分区技术及物化视图技术应用

    Oracle怎么根据物化视图日志快速刷新物化视图

    物化视图的日志(Materialized View Log, MVL)则是用来记录基表(Base Table)上的变化情况,以便于物化视图能够快速地刷新其内容,保持与基表的一致性。通过物化视图日志,系统可以在不扫描整个基表的情况下,只处理自...

    物化视图的两种实现

    物化视图是数据库系统中一个非常重要的特性,它提供了预计算和存储查询结果的方式,以提高数据查询的效率。物化视图可以看作是虚拟视图的实体化版本,其内容是从一个或多个表中通过特定的SQL查询生成的。在实际应用...

    数据库中的物化视图的使用保姆级

    相比普通视图,物化视图可以提供更好的性能,因为普通视图是虚拟表,任何对视图的查询实际上都是转换为对 SQL 语句的查询,性能并没有实际上提高。 在 Vastbase G100 中,物化视图可以分为全量物化视图和增量物化...

    利用ORACLE物化视图建立报表数据库.pdf

    ORACLE物化视图是指包含一个查询结果的数据库对象,相对于普通视图而言,物化视图是一个物理表。物化视图也是一种段,具有自己的物理存储属性,并占用数据库磁盘空间。物化视图可以基于表、视图、物化视图上创建;...

Global site tag (gtag.js) - Google Analytics