达梦数据库物化视图介绍

news2025/1/12 20:55:36

概述

本文将介绍达梦数据库物化视图,给出其概念及相关创建、使用示例。

1.物化视图概念

物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本,占用存储空间,即将查询出来的数据存储在数据库中。当所依赖的一个或多个基表的数据发生更新,必须启用刷新机制才能保证数据是最新的。

物化视图可以用于数据复制(Data Replication),也可用于数据仓库缓存结果集以此来提升复杂查询的性能。

1.1关键参数介绍

数据填充时机

  • BUILD IMMEDIATE: 立即填充。
  • BUILD DEFERRED: 延迟填充且第一次需要全量填充。

刷新模式

  • FAST:根据相关表上的数据更改记录进行增量刷新。普通 DML 操作生成的记录存在于物化视图日志中。使用 FAST 刷新之前,必须先建好物化视图日志。
  • COMPLETE:通过执行物化视图的定义脚本进行完全刷新。
  • FORCE:默认选项。当快速刷新可用时采用快速刷新,否则采用完全刷新。

刷新时机

  • ON COMMIT:相关表上有数据提交时进行刷新。刷新由异步线程执行,数据同步可能存在延迟。
  • START WITH… NEXT:START WITH 指首次刷新的时间,省略 START WITH,首次刷新时间为当前时间。NEXT 指定刷新的时间间隔,省略 NEXT,则物化视图只刷新一次。

注意

START WITH 或者 NEXT 均不指定,不会**自动执行**物化视图刷新。

  • ON DEMAND:用户可通过 REFRESH 语法手动刷新,不能和 START WITH 一起使用。
  • NEVER REFRESH:物化视图从不刷新。

刷新依据

  • WITH PRIMARY KEY 基于主键
    • 只能基于单表
    • 必须含有 PRIMARY KEY 约束,选择列必须直接含有所有的 PRIMARY,KEY(UPPER(col_name) 的形式不可接受)
    • 不能含有对象类型
  • WITH ROWID 基于 rowid
    • 只能基于单表
    • 不能含有对象类型
    • 若同时使用 WITH ROWID 及快速刷新,则必须将 ROWID 提取出来,和其他列名一起,以别名的形式显示

1.2物化视图的分类

按物化视图的使用场景,主要分为如下五大类:

  • SIMPLE:无 GROUP BY、无聚集函数、无连接操作
  • AGGREGATE:仅包含 GROUP BY 和聚集函数
  • JOIN:仅包含多表连接
  • Sub-Query:仅包含子查询
  • COMPLEX:除上述四种外的物化视图类型

2.创建物化视图和物化视图日志

2.1 创建物化视图

默认的物化视图类型,通过主键来标示行的变化,表上必须有主键。示例语句如下:

CREATE MATERIALIZED VIEW dmhr.mv_employees refresh with primary key as
select * from dmhr.employee;

通过user_mviewsb表查看创建的物化视图:

 通过dm管理工具查看创建的物化视图:

 

查询物化视图 dmhr.mv_employees数据:

SELECT * FROM dmhr.mv_employees;

查询结果如下:

 2.2创建物化视图日志

当基表上有 DML 操作时,系统将变化记录在日志表里,然后使用这些日志刷新到物化视图,这种刷新方式为快速刷新。通过快速刷新避免了全量刷新,也降低了同步数据的开销。

CREATE MATERIALIZED VIEW LOG ON dmhr.employee WITH PRIMARY KEY;

注意物化视图日志创建成功后,会自动建立物化视图日志表并在表上建立一个触发器。对应的触发器名称为 MTRG$_EMPLOYEE。

通过dm 管理工具查看物化视图日志表已经创建成功:

 

使用如下语法,将已创建的物化视图刷新方式由全量刷新改为快速刷新。示例语句如下:

ALTER MATERIALIZED VIEW dmhr.mv_employees REFRESH FAST;

接下来通过示例演示物化视图刷新操作:

更新dmhr.employee表员工为1001员工工资,然后刷新到其物化视图中。

查询dmhr.employee表的1001工号员工当前工资:

select EMPLOYEE_NAME,salary from dmhr.employee where EMPLOYEE_ID='1001';

查询结果如下:

更新dmhr.employee表1001工号员工工资,由30000更新至36000: 

update dmhr.employee set salary=36000  where EMPLOYEE_ID='1001';

再次查询dmhr.employee表1001工号员工工资,工资已更新至36000:

 接着查询dmhr.employee表的物化视图日志表:

SELECT * FROM dmhr.MLOG$_EMPLOYEE;

查询结果如下:

查询dmhr.employee表的物化视图: 

SELECT EMPLOYEE_NAME,salary FROM dmhr.mv_employees  where EMPLOYEE_ID='1001'; 

结果如下,1001工号员工工资没有更新至36000:

更新物化视图dmhr.mv_employees刷新模式为FORCE: 

REFRESH MATERIALIZED VIEW dmhr.mv_employees FORCE;

再次查询物化视图dmhr.mv_employees 1001号员工工资也已经更新至36000:

 再次将dmhr.employee表1001号员工工资更新至39000:

update dmhr.employee set salary=39000  where EMPLOYEE_ID='1001';

更新物化视图dmhr.mv_employees刷新模式为fast:

REFRESH MATERIALIZED VIEW dmhr.mv_employees fast;

查看物化视图dmhr.mv_employees1001号员工工资更新至39000:

更新物化视图刷新时机,当用户提交对基表的操作后,自动刷新到物化视图上。

ALTER MATERIALIZED VIEW dmhr.mv_employees REFRESH ON COMMIT;

 再次测试,将dmhr.employee表1001号员工工资更新至42000:

update dmhr.employee set salary=42000  where EMPLOYEE_ID='1001';

查看物化视图dmhr.mv_employees,显示1001号员工工资更新至42000:

 

3.复杂物化视图

支持快速刷新的物化视图,称为复杂物化视图。以下均为不能创建复杂物化视图场景,具体限制为:

  • 不能含有不确定性函数,如 SYSDATE 或 ROWNUM。
  • 不能含有大字段类型。
  • 查询项不能含有分析函数。
  • 查询不能含有 HAVING 子句。
  • 不能包含 ANY、ALL 及 NOT EXISTS。
  • 不能含有层次查询。
  • 不能在多个站点含有相关表。
  • 同一张表上最多允许建立 127 个快速刷新的物化视图。
  • 不能含有 UNION,UNION ALL,MINUS 等集合运算。
  • 不能含有子查询。
  • 只能基于普通表(视图,外部表,派生表等不支持)。
  • DM8 目前仅支持简单类型和部分连接物化视图的快速刷新,连接物化视图不支持的具体类型是外连接和自然连接。
  • 连接物化视图不支持 GROUP BY 和聚集操作。

总结

首先,本文介绍了达梦数据库物化视图概念及其关键参数;
其次,介绍物化视图和物化视图日志创建及示例;
最后,介绍了复杂物化视图限制。

本文只是抛砖引玉,在实际应用中请参考达梦数据库官网文档物化视图相关介绍。

  关于达梦数据库更多学习内容,欢迎访问达梦社区:
https://eco.dameng.com

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

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

相关文章

Vue 项目性能优化 — 实践指南

前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM;但 Vue 项目中仍然存在项目首屏优化、Webpack 编译配置优化等问题,所…

vs2008下的mfc hello world实现

笔者不知道会写这种博文,好久没写mfc程序,hello world都不会创建了。起因是来了个mfc任务,那就得把mfc熟悉起来,先看下实现效果吧 因为是基于2008的,那就按照2008创建吧 文章目录 第一步:文件新建项目第二…

串口接收数据-控制LED灯

目标 通过串口接收数据,对数据分析,控制8个LED灯按照设定时间闪烁。 8个LED灯可以任意设计,是否闪烁。闪烁时间按ms计算,通过串口发送,可设置1~4,294,967,296ms,也就是4字节数据协议自拟,有数…

(AcWing)Dijkstra求最短路 I

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

06:流与并发

一般来说,在CUDA C编程中有两个级别的并发: (1)内核级并发 单一的内核被GPU的多个线程并行执行。 (2)网格级并发 多个内核在同一设备上同时执行。 一、流和事件概述 CUDA流是一系列异步的CUDA操作&am…

概念解析 | 端边云协同智能计算

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:端边云协同智能计算。 揭秘边缘计算与云计算的完美融合:端边云协同智能计算 物联网学报 | “端—边—云”协同的智慧物联网 在云计算和边缘计算日益发展的背景下,如何将两者…

顺序表链表OJ题(3)——【数据结构】

W...Y的主页 😊 代码仓库分享 💕 前言: 今天是链表顺序表OJ练习题最后一次分享,每一次的分享题目的难度也再有所提高,但是我相信大家都是非常机智的,希望看到博主文章能学到东西的可以一键三连关注一下博主…

Visual Studio 2022的MFC框架——AfxWinMain全局对象

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 当程序调用了CWinApp类的构造函数,并执行了CMfcApp类的构造函数,且产生了theApp 对象之后,接下来就…

Maven入门教程(二):idea/Eclipse使用Maven

Maven入门教程(一):安装Maven环境 4.开发工具配置 4.1 idea配置 idea有多个版本,配置是一样的,只是配置页面的入口不一样 旧版idea 新版idea 4.2 Eclipse配置 打开Eclipse,菜单中选择:Window -> Preference ->…

Redis项目实战——商户查询缓存

目录 为什么要用Redis实现商户查询缓存?用Redis实现商户查询缓存的基本思路?使用Redis缓存的问题及解决方法?一、如何保持数据库数据和Redis缓存数据的一致性?1 内存淘汰机制2 超时剔除机制3 主动更新机制(胜&#xff…

【三进制状态压缩】Gym Plates

Problem - A - Codeforces 题意: 思路: 首先读完题目思路肯定就是状压背包 但是怎么状压 这个和一般的状态压缩不太一样,每个数位的状态有三种,意味着要用三进制的状态压缩 可以这样考虑:99887766554433221100 一…

Flutter:自定义组件的上下左右弹出层

背景 最近要使用Flutter实现一个下拉菜单,需求就是,在当前组件下点击,其下方弹出一个菜单选项,如下图所示: 实现起来,貌似没什么障碍,在Flutter中本身就提供了弹出层PopupMenuButton组件和show…

腾讯云服务器学生怎么买?学生服务器购买指南

腾讯云服务器学生怎么买?学生服务器购买指南,腾讯云学生服务器优惠活动:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.…

什么是光流传感器

传感器 文章目录 传感器前言一、光流传感器二、px4FLOW 前言 光流利用的是图像的变化处理,用于检测地面的状态,从而监测飞机的移动;主要用于保持飞机的水平位置,以及在室内实现定高和定点飞行。 其实光流是数字图像处理理论的一部…

学乐多光屏学习机:教育智能硬件领域的前沿力量

在当今数字化时代,教育方式正经历着巨大的变革,智能硬件为教育领域带来了前所未有的机遇和挑战。学乐多光屏学习机作为一款创新的教育智能硬件产品,以其独特的特点和优势,引领着学习机领域的发展潮流。 1. 多功能融合&#xff1a…

使用MATLAB解算炼油厂的选址

背景 记得有一年的数据建模大赛,试题是炼油厂的选址,最后我们采用MATLAB编写(复制)蒙特卡洛算法,还到了省级一等奖,这里把仅有一些记忆和材料,放到这里来,用来纪念消失的青春。 本…

Creo结构设计-弧形实体绘制/两个实体的圆滑连接-轨迹扫描

实际需求: 在很多场景需要建模不同弧度的实体对象,常见的依据横截面进行拉伸操作无法很好的完成,有什么样的操作能够方便完成弧形实体建模? 解决方式: 采用轨迹扫描操作完成 举例1:例如两个垂直的圆柱&…

【OpenCV入门】第一部分——图像处理基础

本文结构 图像处理的基本操作读取图像imread() 显示图像imshow()waitKey()destroyAllWindows() 保存图像imwrite() 获取图像属性 像素确定像素的位置获取像素的BGR值修改像素的BGR值 色彩空间GRAY色彩空间cvtColor()——从BGR色彩空间转换到GRAY色彩空间 HSV色彩空间从BGR色彩空…

根据逻辑分析仪实际波形,解析IIC通信及可能出现的问题(从机控制时钟SCL)

1、通信是信息的传递 1.1、信息 信息是多种多样的,在数字电路中,最基本的信息是高低电平,高低电平的提供需要电路转化的,维持高/低是要消耗能量的,信息需要借助能量来存在。 1.2、传递 从发送端传递到接收端需要媒…

【复杂网络建模】——ER网络和SF网络的阈值分析

目录 1、介绍ER网络和SF网络 2、计算网络阈值 2.1 ER(Erdős-Rnyi)网络 2.2 SF(Scale-Free)网络 3、 研究网络阈值的意义 1、介绍ER网络和SF网络 在复杂网络理论中,ER网络(Erdős-Rnyi网络&#xff…