物化视图VS普通视图

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 物化视图是一种特殊的物理表,“物化”(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物化视图,需要再增加个参数即可。

    需要注意的是,无法在定义时仅指定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)的信息转换为物理数据存储,然后提供不同的策略:定时刷还是及时刷、增量刷还是全局刷等等可以根据实际情况 进行选择,总之你差的是表,不是视图。


关于在刷新和索引上的区别
答曰:他 们两个没有联系吧,刷新我不清楚你是否指的是物化视图的刷新,因为刷新的概念很泛,你说到这里我就理解为物化视图的刷新了,上面也已经说了,这是一种策略 和方法,其实它是通过对视图关联表上创建相应的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是依赖于尝试。

转载于:https://my.oschina.net/u/264186/blog/638110

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EditPlust 批量添加自定义工具

先将插件文件***.js文件放到指定目录,比如editplus的安装下新文件夹tools。 (下载地址见文末) 将下列代码内容另存为tool_u.ini 文件(不能改名), 放到EditPlus 的ini文件目录 (工具-设置目录 可…

iOS c语言 基本运算符

2019独角兽企业重金招聘Python工程师标准>>> iOS_06_基本运算符 一、算术运算 c语言一共有34种运算符,包括了常见的加减乘除 1.加法运算 # 除了能做加法运算,还能表示正号:5、90 2.减法运算- # 除了能做减法运算,还能表…

Maui学习之路(三)--Winui3深入探讨

Maui的学习之路 --- Winui3深入探讨学习Maui已经有一段时间,随着不断地深入,对Maui有了一些初步的了解。我们都知道Maui为了保持平台原生特性,所以在每一个平台都使用了平台自身的原生开发框架,如在Windows系统使用了Winui3作为UI…

centos 7.1 apache 源码编译安装

Apache编译安装 一,需要软件: http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz 1.apr-1.5.2.tar.gz http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gz 2.apr-util-1.5.4.tar.gz http://exim.mirror.fr/pcre/pcre-8.38.tar.gz 3.pcre-8…

通过两级网关设计来路由服务网格流量

编者的话本文是来自笔者的公司 Tetrate[1] 工程师 Petr McAllister 的分享,Tetrate 的拳头产品是 Tetrate Service Bridge[2](下文简称 TSB),它是在开源的 Istio 和 Envoy 基础上构建的,但为其增加了管理平面。简介Tet…

H5开发中常用的js方法

2019独角兽企业重金招聘Python工程师标准>>> h5和app之间的webview交互 这是常用的交互方法之一,iOS可以使用WKWebView,安卓可以使用JsBridge,完成常见的交互效果。function webViewHandler(iosCallback, adrCallback) {if (getMobileOperatingSystem() …

GPS RTK(银河1)基准站架设、移动站设置完整操作流程

本文讲解GPS RTK(银河1)基站架设完整操作流程,包括相对坐标、点校正等操作。 文章目录 一、架设基准站二、启动基准站三、架设移动站四、设置移动站一、架设基准站 基准站一定要架设在视野比较开阔,周围环境比较空旷的地方,地势比较高的地方;避免架在高压输变电设备附近…

在.NET 6.0上使用Kestrel配置和自定义HTTPS

本章是《定制ASP NET 6.0框架系列文章》的第四篇。在本章,我们将学习ASP.NET Core的Kestrel配置和自定义HTTPS,好我们开始正文。在ASP.NET Core中,默认情况下HTTPS处于打开状态,这个不是问题,我们无需禁用它。因为如果…

Virtualbox安装增强工具失败

在安装Virtualbox增强工具安装时出现unable to find the sources of your current Linux kernel,安装失败,导致主机与虚拟机之间不能共享文件夹,不能复制粘贴,鼠标也不能直接移动到物理机,需要按快捷键才行。 解决办法…

C语言试题118之求1到20的每个数的阶层之和

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:求 1+2!+3!+…+20!的和 分析:此程序只是把累加变成了累乘。 2 、温馨提示 想获取更多…

java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR起因及解决办法

java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR 最近这个错误遇到了好多次,不过都很轻松的解决了,问题的起因是多了一个collection包,如下图 看到了,只要把其中的一个删除掉,更新启动Tomcat就行了。 本文转自suc…

[转]EL函数、自定义EL函数、自定义标签

EL函数 1、EL函数的作用&#xff1a;操作字符串 2、在JSP页面中要引入EL函数库 <% taglib prefix"fn" uri"http://java.sun.com/jsp/jstl/functions" %> 3、语法 ${ fn:方法名(参数) } 4、实例 <% page language"java" contentTyp…

C语言试题119之利用递归方法求 5的阶层

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:利用递归方法求 5的阶层 分析:递归公式:fn=fn_1*4的阶层 2 、温馨提示 想获取更多C…

深入学习http协议(转)

http://www.blogjava.net/zjusuyong/articles/304788.html转载来的&#xff0c;没看到原文地址。http协议学习系列1. 基础概念篇1.1 介绍HTTP是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写。它的发展是万维网协会&#xff08;World Wide Web Co…

CSS浮动属性Float到底什么怎么回事,下面详细解释一下

float 是 css 的定位属性。在传统的印刷布局中&#xff0c;文本可以按照需要围绕图片。一般把这种方式称为“文本环绕”。在网页设计中&#xff0c;应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图片一样。浮动的元素仍然是网页流的一部分。这与使用绝对 定…

MAUI Developer Day in GCR

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍作为一个支持在单一代码库中开发能够运行在 Android、iOS、macOS 和 Windows 等多平台的应用程序的跨平台框架&#xff0c;.NET MAUI &#xff08;多平台应用程序用户界面&#xff09;还在预览版时就…

C语言试题126之请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二…

【ArcGIS风暴】ArcGIS点云抽稀(稀疏化LAS点)详解案例教程

考虑对过采样 LAS 数据(例如通过摄影测量方式获得的点云以及多个叠加激光雷达扫描的返回值)使用稀疏化LAS点工具,以优化显示性能和加速分析操作。 文章目录 1. 创建las数据集2. 稀疏化LAS点适用版本:ArcGIS10.6以上。 1. 创建las数据集 扩展阅读:ArcGIS10.6创建LAS数据集…

20145313张雪纯《信息安全系统设计基础》第11周学习总结

20145313张雪纯《信息安全系统设计基础》第11周学习总结 教材 异常控制流&#xff08;ECF&#xff09; 最简单的“平滑序列”类型的控制流是指PC中相邻的指令在存储器中也相邻。而异常控制流则是指程序变量表示的内部程序状态中的变化、系统状态的变化等突发情况使得控制系统做…