广告
返回顶部
首页 > 资讯 > 数据库 >Oracle普通视图和物化视图的区别有哪些
  • 858
分享到

Oracle普通视图和物化视图的区别有哪些

2024-04-02 19:04:59 858人浏览 独家记忆
摘要

本篇内容主要讲解“oracle普通视图和物化视图的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle普通视图和物化视图的区别有哪些”吧!物化视

本篇内容主要讲解“oracle普通视图和物化视图的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle普通视图和物化视图的区别有哪些”吧!

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

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

4、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 hh34:mi:ss')

5、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)

6、物化视图的刷新
刷新(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 hh34:mi:ss')

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

8、物化视图的删除:
虽然物化视图是和表一起管理的,但是在经常使用的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)的信息转换为物理数据存储,然后提供不同的策略:定时刷还是及时刷、增量刷还是全局刷等等可以根据实际情况进行选择,总之你差的是表,不是视图。

关于在刷新和索引上的区别

他们两个没有联系吧,刷新我不清楚你是否指的是物化视图的刷新,因为刷新的概念很泛,你说到这里我就理解为物化视图的刷新了,上面也已经说了,这是一种策略和方法,其实它是通过对视图关联表上创建相应的LOG,根据日志信息的sql同步到物化视图中的,一般来说:定时的一般是全局刷,及时的一般是局部刷。

而索引这个说起来就多了,可以说索引专门是一门课程,大概点来说,索引一般有普通索引、位图索引、唯一性索引(还有全文索引啥的,一般不用),其实仔细研究会发现无论是那一种索引都是B+树为基础,并起存放方式和表一样,是以段为单位,只是内部有树关系而已。
1、普通索引是根据B+树找到第一个(索引时有序的),然后以当前为基准,向后顺序找到不符合条件的健值为止。
2、位图是在叶子节点上根据位图种类对叶子节点的值进行01编码存放(如该字段有1、2、3三种值,就会在叶子节点上有三个位图,每个位图根据健值和ROWID顺序存放是否为1、是否为2、是否为3,所以在RBO下统计很快,CBO下一般会认为是普通索引)。
3、也是按照B+树找,只是找到就不再做任何操作,因为是唯一的。

因为B+查找是一个类似表的查询,而且获取到ROWID后还是要回表查询的,所以这个过程的开销要和全表扫描计算那个结果更加快,ORACLE才会选择是走索引还是走全表扫描,当然对于CBO和RBO选择的方式不一样,具体又是很多,CBO要依赖于表的统计信息,RBO是依赖于尝试。

到此,相信大家对“Oracle普通视图和物化视图的区别有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle普通视图和物化视图的区别有哪些

本文链接: https://www.lsjlt.com/news/65149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle普通视图和物化视图的区别有哪些
    本篇内容主要讲解“Oracle普通视图和物化视图的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle普通视图和物化视图的区别有哪些”吧!物化视...
    99+
    2022-10-19
  • 物化视图和普通视图的区别
        物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL...
    99+
    2022-10-18
  • 数据库视图和表有哪些区别
    数据库视图和表的区别有:1、表是数据库中用于存储数据的物理结构,而视图只是基于表或多个表的查询结果集;2、表是数据的物理存储单元,视图只是提供了查看和操作表数据的规则;3、视图为数据库提供高级的安全机制,表没有安全机制;4、视图是表的抽象;...
    99+
    2023-10-22
    数据库视图 数据库表
  • mysql视图与表的区别有哪些
    本篇内容主要讲解“mysql视图与表的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql视图与表的区别有哪些”吧! ...
    99+
    2022-10-19
  • 数据库视图和表的区别有哪些
    小编给大家分享一下数据库视图和表的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!区别:1、视图是已经编译好的sql语句...
    99+
    2022-10-18
  • oracle视图优化技巧有哪些
    以下是优化Oracle视图的一些技巧:1. 选择合适的视图类型:Oracle提供了不同类型的视图,如简单视图、复杂视图、内联视图等。...
    99+
    2023-08-15
    oracle
  • oracle中的视图有哪些优点
    Oracle中的视图有以下优点:1. 简化数据查询:视图可以将复杂的查询逻辑封装起来,使得用户可以通过简单的查询语句访问需要的数据,...
    99+
    2023-08-15
    oracle
  • oracle删除视图的方法有哪些
    Oracle数据库中删除视图的方法有以下几种:1. 使用DROP VIEW语句:可以使用DROP VIEW语句来删除视图。语法如下:...
    99+
    2023-09-14
    oracle
  • Dreamweaver CS3表格三种视图模式有哪些区别
    这篇文章主要介绍Dreamweaver CS3表格三种视图模式有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Dreamweaver CS3设计网页的时候, 我们经常能泳道表格,它以简洁明了和高效快捷的方式将...
    99+
    2023-06-08
  • oracle视图传参数的方法有哪些
    在Oracle中,可以使用以下方法传递参数给视图:1. 使用变量:可以在视图定义中使用变量,并在查询时传递参数值。例如:```sql...
    99+
    2023-08-08
    oracle
  • Matplotlib可视化最有价值的图表有哪些
    这篇文章主要为大家展示了“Matplotlib可视化最有价值的图表有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Matplotlib可视化最有价值的图表有哪些”这篇文章吧。介绍这些图表根据...
    99+
    2023-06-02
  • 常用的Oracle 11g内存视图脚本有哪些
    今天就跟大家聊聊有关常用的Oracle 11g内存视图脚本有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天主要分享几个关于Oracle数据库...
    99+
    2022-10-19
  • 云服务器和普通服务器的区别有哪些
    云服务器和普通服务器的区别有:1、定义不同,云服务器是一个服务器集群,普通服务器是提供计算服务的硬件设备;2、配置不同,云服务器一切计算均在云端实现,不用提前购买硬件,普通服务器的构成包括处理器、硬盘、内存、系统总线等;3、故障率不同,云服...
    99+
    2022-10-10
  • php静态方法和普通方法的区别有哪些
    这篇文章主要介绍了php静态方法和普通方法的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。区别:静态方法可以通过“类名::方法名”直接调用;而普通方法需要创建一个实...
    99+
    2023-06-09
  • es6箭头函数和普通函数的区别有哪些
    这篇文章主要介绍“es6箭头函数和普通函数的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6箭头函数和普通函数的区别有哪些”文章能帮助大家解决问题。ES6 箭头函数的主要区别如下:&n...
    99+
    2023-06-17
  • mysql的常用系统表和视图有哪些
    这期内容当中小编将会给大家带来有关mysql的常用系统表和视图有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一.information_schema下常用表1.SC...
    99+
    2022-10-18
  • Oracle 视图可以进行DML操作的条件有哪些
    本篇文章给大家分享的是有关Oracle 视图可以进行DML操作的条件有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。条件一:在连接视图中不能有Order by、Group ...
    99+
    2023-06-06
  • 高防服务器和普通服务器的区别有哪些
    高防服务器和普通服务器的区别:1.普通服务器是一种提供计算服务的设备,高防服务器主要是指一个独立的单一服务器,硬防御超过50G,可以为单一客户提供安全维护。2.高防服务器主要针对DDos和CC流量攻击,是把病毒引流到防御装备上,而不是用普通...
    99+
    2022-10-06
  • 外贸仿牌空间和普通空间的区别有哪些
    外贸仿牌空间和普通空间的区别有:1、外贸仿牌空间拥有普通空间的任何管理功能,且有网站实时Mrtg访问流量图等功能,普通空间只有网站FTP账户密码、数据库帐户密码及在线管理的控制面板;2、外贸仿牌空间会自动智能进行解析,跳转到没有被封停的节点...
    99+
    2022-10-03
  • es6中箭头函数和普通函数的区别有哪些
    这篇文章主要介绍es6中箭头函数和普通函数的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 区别:1、箭头函数的定义要比普通函数定义简洁、清晰得...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作