Oracle 物化视图创建(materialized)

devtools/2024/9/25 14:02:45/

要想创建 “物化视图,至少具有 ‘CREATE MATERIALIZED VIEW’ 权限”

-- 权限查询,非 DBA 用户,则使用 user_sys_privs 即可
SELECT * FROM dba_sys_privs t WHERE t.privilege LIKE '%MATERIALIZED%';
grant create materialized view to scott; -- 授权
revoke create materialized view from scott; -- 回收

创建物化视图时的选项有很多,知晓常用的即可:

create materialized view 物化视图名        -- 1. 创建物化视图
build [immediate | deferred] 			  -- 2. 创建方式,默认 immediate
refresh [force | fast | complete | never] -- 3. 物化视图刷新方式,默认 force
on [commit | demand] 					  -- 4. 刷新触发方式
start with 开始时间						  -- 5. 设置开始时间
next 间隔时间				              -- 6. 设置间隔时间
with [primary key | rowid]                -- 7. 类型,默认 primary key
[enable | disable] query rewrite          -- 8. 是否启用查询重写
as	                                      -- 9. 关键字
查询语句;                                  -- 10. select 语句

示例:

CREATE MATERIALIZED VIEW mv_memberdetail
BUILD IMMEDIATE 
REFRESH FAST ON COMMIT 
START WITH SYSDATE NEXT SYSDATE + 1/24 -- 每小时刷新一次
AS SELECTmember_id,order_date,count(*) AS order_count,sum(pay_amount) AS pay_sum
FROM order_detail
GROUP BY member_id, order_date;

语法解释:

1. "创建 build" 的方式(1) 'immediate':立即生效,默认。(2) 'deferred' : 延迟至第一次 refresh 时才生效
2. "刷新 refresh" 的方式(1) force	:默认。如果可以 '快速刷新''快速刷新',否则执行 '完全刷新'(2) fast	:'快速刷新'。只刷新 '增量' 部分(前提:创建 '物化日志'(3) complete: '完全刷新'。刷新时更新全部数据,包括视图中已经生成的原有数据(4) never	: 从不刷新	
3. "触发" (请注意,on demand 中,才需要设置 '开始时间''间隔时间') -- 冲突(1) on commit:基表有 commit 动作时,刷新刷图("不能跨库执行"(2) on demand:在需要时刷新[1] 根据后面设定的 '开始时间''结束时间' 进行刷新[2] 手动调用 dbms_mview 包中的过程进行刷新			       
4. 基于基表的 primary key 或 rowid 创建(1) 如果是基于 rowid,则不能对基表执行 '分组函数''多表连接' 等需要把多个 rowid 合成一行的操作(理由很简单:到底以哪个 rowid 为准呢?)
5. enable query rewrite 启用查询重写(请注意, '开始时间''间隔时间' 不支持)-- 冲突(1) 不支持的理由也很简单。所谓的 '重写',就是讲对基表的查询定位到物化视图上,而 '开始时间''间隔时间' 会造成物化视图上部分数据延迟,所以,不能重写(2) 参数: query_rewrite_enabled (可通过 v$parameter 视图查询)

查看物化视图的相关信息(及整体的刷新时间)

SELECTb.mview_name,b.refresh_mode,b.refresh_method,b.fast_refreshable,b.last_refresh_type,b.last_refresh_date,b.staleness,b.* 
FROMuser_mviews b 
WHEREb.mview_name = 'PLM_CUSV_PART_MV'

查看物化视图的最后刷新时间(对应各个基表):

SELECT * FROM user_mview_refresh_times;

查看物化视图的数据新鲜度:

SELECT b.mview_name, b.* FROM user_mview_analysis;

查询

1. 查询物化视图,非 DBA 用户,请查询 all_mviews 或 user_mviews
SELECT *FROM dba_mviews tWHERE t.owner = 'SCOTT'AND t.mview_name = 'MVW_PERSON_INFO';
2. 查询一般视图
SELECT * FROM dba_views;

修改

alter materialized view 物化视图名
refresh [force | fast | complete | never]
on [commit | demand]
start with 开始时间
next 间隔时间

删除

drop materialized view 物化视图名;

给物化视图加索引

CREATE UNIQUE INDEX idx_member_id ON mv_memberdetail(member_id DESC);

注意:

一旦加了物化视图,所涉及的表都会执行物化视图的规则,如果其中一张表正在执行逻辑处于不可用状态,前端逻辑又进行操作了,可能会造成ORA-12048错误。


http://www.ppmy.cn/devtools/116998.html

相关文章

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目,包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题,可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

智能养殖场人机交互检测系统源码分享

智能养殖场人机交互检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

视频压缩怎么操作?3款工具轻松告别内存不足的困扰

是不是越来越多的朋友都在用视频记录日常的点滴啊? 是不是想着把视频发到分享平台上,却发现视频的时长超过了平台的限制,没办法直接上传? 想找好用的视频压缩软件手机版,却发现都是需要付费的? 别急&…

ArcGIS Pro SDK (十五)共享

ArcGIS Pro SDK (十五)共享 文章目录 ArcGIS Pro SDK (十五)共享1 ArcGIS 项目管理器:获取当前活动门户2 ArcGIS 项目管理器:获取所有门户的列表3 ArcGIS 项目管理器:将门户添加到门户列表4 ArcGIS 项目管理器:获取门户并登录,将其设置为活动状态5 ArcGIS 程序管理器:…

QT——多线程操作

一、单线程和多线程的区别 单线程指的是程序在执行时只有一个流程,也就是一次只能执行一个任务。当程序中某个任务需要花费大量时间时,单线程会导致整个程序阻塞,用户体验会变差。 多线程则是指程序在执行时可以同时执行多个任务,每个任务都是一个独立的线程。多线程可以…

清华大学开源 CogVideoX-5B-I2V 模型,以支持图生视频

CogVideoX 是源于清影的开源视频生成模型。 下表列出了我们在此版本中提供的视频生成模型的相关信息。 Model NameCogVideoX-2BCogVideoX-5BCogVideoX-5B-I2V (This Repository)Model DescriptionEntry-level model, balancing compatibility. Low cost for running and second…

MacOS上安装MiniConda的详细步骤

前言 MiniConda是一种环境配置工具。在不同的开发项目中,我们会使用到不同版本的Python和第三方库(例如Numpy、Pandas)。如果不使用环境配置工具,每次开发都需要清除电脑里上一次开发的环境和配置文件。为了在同一台机器上同时开发多个项目&…

2024年10月2-4日(星期三-星期五)骑行(石林-老圭山)

2024年10月2-4日 (星期六)骑行(石林-大草坪---长坪---石头寨---海邑镇---老圭山),早8:30到9:00,新螺蛳湾客运站正门,地铁二号线南部客运站站出口集合,9:30装车,10:00出发。偶遇地点:…