当前位置: 首页 > news >正文

oracle物化视图

物化视图定义

视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集,每次访问它都会导致这个查询语句被执行一次,为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图(也叫实体化视图)。

物化视图与普通视图相比的区别是物化视图是建立的副本,它类似于一张表,需要占用存储空间,对一个物化视图查询的执行效率与查询一个表是一样的。

物化视图的优点是查询速度快,因为数据已经存在,查询物化视图就等同于查询一张表的数据。

物化视图的缺点就是占用空间,因为数据是真实存储的,而不像普通视图只是一条查询语句。

物化视图创建语法:

CREATE MATERIALIZED VIEW view_name 
[BUILD IMMEDIATE | BUILD DEFERRED]
refresh [FAST|COMPLETE|FORCE] 
[ON [COMMIT|DEMAND] | START WITH (start_time) NEXT (next_time)]AS
subquery

BUILD IMMEDIATE:是在创建物化视图的时候就生成数据。(默认)

BUILD DEFERRED:在创建时不生成数据,以后根据需要再生产数据。

刷新(refresh):指在基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。

refresh关键字后面可以指定的刷新方式有三种:FAST、COMPLETE、FORCE(默认),FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。

刷新的模式有两种:ON COMMIT和ON DEMAND(默认),ON COMMIT指基表发生COMMIT操作时自动刷新;ON DEMAND指需要手动刷新物化视图。

下面的实例都是基于oracle中scott用户自带的emp表和dept表数据进行操作:

类型一:手动刷新的物化视图

创建物化视图:

create materialized view MV_EMP
refresh force on demand
as
select e.ename,d.dname from emp e
left join dept d on e.deptno = d.deptno;

以上创建的含义就是创建一个名称为mv_emp的物化视图,视图数据的采用手动刷新的模式(on demand),自动选择增量或全量更新(refresh force)。

创建完成后,可以发现,在PL/SQL中,Tables和Materialized views中,都会显示刚才创建的物化视图对象。

查询物化视图数据:

往emp表中插入一条数据(15条记录):

查询物化视图数据(14条记录):

可以看到物化视图结果集中只有14条记录,最新插入的记录并没有被查询出来,这时因为刚才创建的物化视图是手动刷新模块(on demand),所以需要手动执行物化视图数据更新语句,进行数据更新操作。

手动刷新物化视图记录:

begindbms_mview.refresh('mv_emp');
end;

刷新后,再查询物化视图(15条记录):

这次数据跟emp表记录数一致了。

类型二:自动刷新的物化视图

create materialized view mv_emp1
refresh force on commit
as
select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno;

以上创建的含义就是创建一个名称为mv_emp1的物化视图,视图数据的采用自动刷新的模式(on commit),自动选择增量或全量更新(refresh force)。

这里需要注意下,emp表和dept表关联的写法改了,以为如果使用left join关键字,会提示“无法为实体化视图设置 ON COMMIT 刷新属性”。

视图创建完毕,对视图进行查询(15条记录):

对emp表插入数据:

再查询物化视图:

发现物化视图的数据自动刷新了,跟emp表数据保持一致。

手动刷新和自动刷新两种刷新方式,根据实际情况进行选择,对数据实时性要求不高的,可以选择手动刷新,比如要做个每日报表,统计每天的数据情况,可以使用手动刷新(每天凌晨1点);对数据实时性要求高的,选择自动刷新。

类型三:创建时不生成数据的物化视图

create materialized view mv_emp2
build deferred
refresh force on commit
as
select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno;

类型一和类型二,视图创建完毕,视图就自动加载了基表的数据,如果要想在视图创建完毕后,先不生成数据,在需要的时候再生成数据,则可以使用build deferred关键字进行设置。

查询生成的视图:

可以看到视图中没有任何记录。

如果想让视图中加载数据,则需要手动执行下数据更新的方法:

begindbms_mview.refresh('mv_emp2');
end;

执行完毕,再次查询,视图中就加载了最新的数据:

此时因为视图是提交时更新,所以在emp表数据变化时时,视图的数据会随之更新。

类型四:创建增量更新的物化视图

注意:创建增量刷新的物化视图,必须:

1.创建物化视图中涉及表的物化视图日志,记录基表发生了什么变化,用这些记录去更新物化视图。

2.在查询语句中,必须包含所有表的rowid(以rowid方式建立物化视图日志)

--为基表创建 物化视图日志
create materialized view log on emp with rowid;
create materialized view log on dept with rowid;

执行完毕后,在Tables中可以看到创建的日志表:

创建增量更新的物化视图,查询语句中必须加上基表的rowid

create materialized view mv_emp3
refresh fast on demand
as
select e.rowid erowid,d.rowid drowid, e.ename,d.dname 
from emp e, dept d where e.deptno = d.deptno;

以上创建的含义就是创建一个名称为mv_emp3的物化视图,视图数据的采用手动刷新的模式(on demand),增量更新(refresh fast)。

查询视图数据集:

对emp表删除一条数据,查看物化视图日志表中数据的信息:

手动进行刷新操作:

begindbms_mview.refresh('mv_emp3');
end;

物化视图的数据才会被更新,同步物化视图日志的数据被被清除,也就是说物化视图日志中的数据是待处理的数据,当物化视图更新后,物化视图日志中的数据就会被删除。

相关文章:

oracle物化视图

物化视图定义 视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集,每次访问它都会导致这个查询语句被执行一次,为了避免每次访问都执行这个查询,可以将这个查询结果集存储到…...

基于ssm校园线上订餐系统的设计与实现论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…...

鸿蒙南向开发—OpenHarmony技术编译构建框架

概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小粒度拼装产品和独立编译。支持轻量、小型、标准三种系…...

Android Jetpack学习系列——Navigation

写在前面 Google在2018年就推出了Jetpack组件库,但是直到今天我才给重视起来,这真的不得不说是一件让人遗憾的事。过去几年的空闲时间里,我一直在尝试做一套自己的组件库,帮助自己快速开发,虽然也听说过Jetpack&#…...

编程语言的新趋势

随着科技的飞速发展,IT行业经历了巨大的变革,其中编程语言作为技术生态的核心要素,其演变趋势对整个行业影响深远。从过去到现在,再到未来,编程语言的发展都呈现出明显的时代特征。本文将探讨当前IT行业的现状&#xf…...

C++:类和对象(2)

目录 1.strcut和class的区别 2.将成员属性设置为私有 3.对象的初始化和清理 3.1 构造函数和析构函数 3.1.1 构造函数语法 3.1.2 析构函数语法 3.1.3 检验 3.2 构造函数的分类和调用 3.3 拷贝构造函数调用 1.strcut和class的区别 struct和class的唯一区别在于默认的访问…...

【React系列】网络框架axios库的使用

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. axios库的基本使用 1.1. 网络请求的选择 目前前端中发送网络请求的方式有很多种: 选择一:传统的Aj…...

pygame学习(二)——绘制线条、圆、矩形等图案

导语 pygame是一个跨平台Python库(pygame news),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模…...

TCL学习笔记(持续更新)

前言: TCL(tool common language)是一种通用工具语言,很多eda tool都支持tcl,学习了解一些tcl基本语法还是很有必要的。 1:基础概念 解释器: #!/usr/bin/tclsh 打印: puts -> p…...

Xpath的问题:为什么在DOM中确定存在(可见)的元素,用//表达式匹配不到(附解决办法)

今天遇到一个很有意思的问题,我的爬取的目标页面上有时会出现一个弹窗,它挡住我点击其它按钮了,我想找到它的关闭按钮,自动点击一下关闭掉,本来是很简单的事情,但偏偏出问题了,DOM中看到的html是…...

有没有游泳可以戴的耳机?游泳耳机入耳式好,还是骨传导好

游泳是一项既能锻炼身体又能让人放松心情的运动。我们知道,音乐能够为我们的水上时光增添更多的乐趣。那么,在众多游泳耳机中,如何选择一款既适合自己的需求又具备良好性能的产品呢? 首先,我们要了解的是,…...

【绘图软件】自用安装教程

链接:https://pan.baidu.com/s/17r9Pr460FzkULU7fTr91_w?pwdftv7 提取码:ftv7 --来自百度网盘超级会员V6的分享解压并且右键打开set up 解压crack软件前需要退出杀毒软件, 关闭实时保护 域网络关闭,专用网络关闭&#xff0…...

AIGC时代-GPT-4和DALL·E 3的结合

在当今这个快速发展的数字时代,人工智能(AI)已经成为了我们生活中不可或缺的一部分。从简单的自动化任务到复杂的决策制定,AI的应用范围日益扩大。而在这个广阔的领域中,有两个特别引人注目的名字:GPT-4和D…...

springBoot集成RabbitMQ实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收

该项目介绍了springboot如何集成rabbitMQ消息中间件,实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId...

Attention机制

目录 提出背景 Attention原理 Attention机制本质思想 Attention机制总结 改进&#xff1a;Self-Attention 前置知识&#xff1a;RNN&#xff0c;LSTM/GRU 提出背景 Attention模型是基于Encoder-Decoder框架提出的。Encoder-Decoder框架&#xff0c;也就是编码-解码框架&…...

Rust 常用的第三方库

Rust 的标准库虽然已经很强大&#xff0c;但如果恰当地使用第三方库&#xff0c;可以大大改善编程效率。以下是一些常用的 Rust 第三方库。 tokio ---- 最通用的异步编程库&#xff0c;几乎可以说是行业标准了&#xff0c;大量的其它库依赖于tokio。reqwest ---- HTTP 客户端库…...

构建高可用性Java应用:介绍分布式系统设计与开发

构建高可用性Java应用需要考虑许多因素&#xff0c;其中之一是设计和开发分布式系统。分布式系统是由多个独立计算机或节点组成的系统&#xff0c;这些节点通过网络连接&#xff0c;共同完成一项任务。 在分布式系统设计和开发中&#xff0c;有几个关键方面需要考虑&#xff1…...

x-cmd pkg | gitui - git 终端交互式命令行工具

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 gitui 由 Stephan D 于 2020 年使用 Rust 语言构建的 git 终端交互式命令行工具&#xff0c;旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x gitui 即可自动下载并使用 在终端运行 eval "$(curl https:/…...

javaWeb案例知识点

一.rest风格编程 二.综合案例结构 三.分页查询 分页插件PageHelper 四.部门管理开发 五.员工管理开发 六.文件上传...

SQL日期列更新操作详解

在实际的数据库管理过程中&#xff0c;有时我们需要对数据库中的日期列进行更新。这篇博客将详细介绍一条 SQL 语句&#xff0c;该语句用于更新 referral_up_order 表中的多个日期列&#xff0c;并将它们的日期部分更改为 2023-10-24&#xff0c;同时保留原始时间部分。 1、背…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...