当前位置: 首页 > 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、背…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...