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

Oracle数据库物化视图概述

Oracle数据库物化视图概述

物化视图介绍

物化视图是查询结果被提前存储或"物化"的模式对象。在查询的 FROM 子句中可以是命名表、 视图、和物化视图。总体上,这些对象被称作主表(复制术语) 或明细表 (数据仓库术语)。
物化视图(Materialized View)是Oracle数据库中一种特殊的物理表,它存储了查询结果的物理副本,而不是仅仅存储查询的定义‌。
物化视图会实际存储查询结果,就像一个物理表一样‌。物化视图的首要特点

物化视图特点

物理存储‌:物化视图实际存储数据,占用数据库存储空间‌
性能优势‌:可以显著提高复杂查询的性能,特别是涉及多个表连接或聚合运算的查询‌3
数据同步‌:可以经过不同方式刷新以保持与基表内容的一致性‌
索引支持‌:可以像普通表一样创建索引进一步优化查询性能‌

当用于查询重写操作,它们可以提高 SQL 的执行性能。
它们的存在对 SQL 应用程序和用户是透明的。
用户可以直接使用 SELECT 语句查询物化视图(与索引的不同点)

简单案例

下面的示例创建并填充基于 sh 示例模式中的三个主表的聚合物化视图:
CREATE MATERIALIZED VIEW sales_mv AS SELECT t.calendar_year, p.prod_id, 
SUM(s.amount_sold) AS sum_salesFROM times t, products p, sales sWHERE t.time_id = s.time_id AND p.prod_id = s.prod_idGROUP BY t.calendar_year, p.prod_id;下面的示例删除物化视图 sales_mv 的主表 sales,然后查询sales_mv。该查询能选出数据,是因为其行数据与主表中的数据是分开存储的。
SQL> DROP TABLE sales;
Table dropped.
SQL> SELECT * FROM sales_mv WHERE ROWNUM < 4;
CALENDAR_YEAR PROD_ID     SUM_SALES
------------- ---------- ---------- 1998          13         936197.531998          26         567533.831998          27         107968.24

物化视图适用场景

1、数据仓库和报表系统‌:预先计算艰难聚合查询结果‌

2、分布式数据库环境‌:在不同数据库间同步数据‌。1)在物化视图复制中,该视图包含从某个表的单一时间点的完整或部分拷贝。物化视图在分布式站点上复制数据,并将在多个站点上执行的更新同步。2)在移动的计算环境中,可以使用物化视图将数据子集从中央服务器下载到移动客户端,从中央服务器定期刷新客户端,并定期将客户端更新传输回中央服务器。

3、性能优化‌:加速频繁执行的繁琐查询‌

4‌、数据整合‌:将多个数据源的数据汇总到一个视图中‌

在复制环境中,物化视图与一个称为主数据库的不同数据库中的表共享数据。在主站点上与物化视图关联的表是主表。
下图演示了一个数据库中的物化视图,它基于另一个数据库中的主表。对主表的更新被复制到物化视图。

image-20260414110743515

物化视图的刷新方法

在主表中的数据更改后,数据库通过刷新物化视图来对其进行维护。
刷新方法可以是增量刷新(也称快速刷新),或完全刷新。
当物化视图最初被定义为 BUILD IMMEDIATE 时,会发生完全刷新,除非物化视图引用了一个预建表。完全刷新涉及执行物化视图定义的查询,此过程可能很慢,尤其是当数据库必须读取和处理大量的数据时。
快速刷新消除了从零开始重新生成物化视图的需要。因此,它仅处理更改,这样可能刷新速度会非常快。可以按需或按定期的时间间隔刷新物化视图。
另外,与其主表在同一数据库中的物化视图,只要当主表的事务提交其所做的更改,如果配置提交刷选的增量刷选机制,就可以每次提交时刷新物化视图。
对于使用快速刷新方法的物化视图,由物化视图日志或直接加载器日志来记录对主表的更改。
物化视图日志是一个用于记录主表数据更改的模式对象,以便可以以增量方式刷新物化视图。
每个物化视图日志都与单个主表相关联。物化视图日志与其主表驻留在同一个数据库和模式内。

物化视图的分类

按刷新方式分类

ON DEMAND:需要手动或按计划刷新物化视图
ON COMMIT:基表数据变更提交时自动刷新物化视图

按刷新方法分类

FAST:增量刷新,只刷新自上次刷新后修改的资料
COMPLETE:完全刷新,重新计算整个物化视图
FORCE:Oracle自动选择FAST或COMPLETE方式(默认)
NEVER:不进行任何刷新

创建物化视图的基本语法

CREATE MATERIALIZED VIEW [视图名称]
BUILD IM
MEDIATE|DEFERRED REFRESH FAST|COMPLETE|FORCE ON DEMAND|COMMIT
START WITH [开始时间] NEXT [间隔时间] WITH PRIMARY KEY|ROWID
AS [查询语句];
参数说明:
BUILD IMMEDIATE:创建时立即生成数据
BUILD DEFERRED:创建时不生成数据,后续需要时再生成
REFRESH:指定刷新方式(FAST/COMPLETE/FORCE)
ON DEMAND|COMMIT:指定刷新触发方式
START WITH和NEXT:设置刷新计划

物化视图刷新示例

-- 手动完全刷新
BEGINDBMS_MVIEW.REFRESH('mv_sales_summary', 'C');
END;
-- 手动增量刷新
BEGINDBMS_MVIEW.REFRESH('mv_sales_summary', 'F');
END;

查询重写

查询重写是一种优化技术,它将一个按主表写的用户请求,转换为在语义上等效的、包含物化视图的请求。当基表包含大量的数据时,计算一个聚合或联接是非常昂贵和费时的。因为物化视图包含预计算的聚合和联接,所以查询重写能使用物化视图迅速响应查询。

优化器的查询变换器透明地重写用户请求,以便使用物化视图,而无需用户干预或在 SQL 语句中引用物化视图。因为查询重写是透明的,可以添加或删除物化视图,而不会使应用程序中的 SQL 代码无效。

通常,启用重写查询以使用物化视图,而不是使用明细表,能减少响应时间。

下图显示了数据库同时生成原始的和经过重写的查询执行计划,然后选择成本最低的计划。

image-20260414111344916

http://www.jsqmd.com/news/707791/

相关文章:

  • 中山定制楼梯品牌怎么选?从技术维度拆解核心标准 - 资讯焦点
  • 选择旅游团商家时应从哪些方面考量、如何挑选? - 品牌推荐官方
  • 别再手动调PID了!用STM32 MotorControl Workbench 5.4.4快速搞定FOC电机调试
  • GHelper:轻量级华硕笔记本控制工具完整使用指南
  • CST优化器避坑指南:为什么你的参数优化总不收敛?可能是这5个设置没搞对
  • 白酒品牌究竟该找谁来做?原来背后有这些门道! - 品牌推荐官方
  • GEO 实战教程:从 0 到 1 构建企业 GEO 体系
  • 给新生儿选纸尿裤别踩坑,2026年10大主流品牌盘点 - 资讯焦点
  • 桌面/在线/小程序三种抠图路线,2026 年选哪种更方便
  • STM32---项目学习日记
  • 2026年高效降AI工具必备收藏清单 - 降AI实验室
  • 茶韵悦龄——基于AI与适老化设计的益智康养平台
  • AI Agent开发指南:从Awesome清单到实战应用
  • 证件翻译公司选型全攻略:资质、流程与服务核心标准 - 资讯焦点
  • 2026年3月回填土压密注浆公司口碑推荐,基础灌浆加固/堤坝帷幕注浆/回填土压密注浆/地基注浆,回填土压密注浆企业找哪家 - 品牌推荐师
  • 如何快速掌握Chromium/V8通用修改器:终极Chromatic使用指南
  • XUnity.AutoTranslator终极教程:3步让任何Unity游戏秒变中文版
  • 不止torch.exp():一文搞懂PyTorch中指数对数全家桶(expm1/log/log2/log10)的实战用法
  • Keras多层感知机(MLP)实战指南与优化技巧
  • VMware Unlocker深度解析:跨平台macOS虚拟化技术实现原理
  • AI Agent桌面工作台Hermes GUI:架构解析与高效开发实践
  • NCMDump完整指南:专业解密网易云音乐NCM加密格式
  • 假设检验实战指南:从原理到Python/R代码实现
  • VoltAgent智能电压管理框架:从原理到实战部署详解
  • 2026 年在线去背景实操记录:从选工具到出图的全流程方案
  • 考完HCCDA-AI认证后,我整理了这份华为云ModelArts实战避坑指南
  • 机器学习-第二章 KNN算法
  • 告别手动抄写:用本地AI工具轻松提取视频字幕
  • SQL零基础入门:这10个语句解决80%的数据查询问题(超详细代码注释)
  • Debian 包管理全指南:从底层 dpkg 到高层 apt 及其日志追踪