首页 > 数据库 >Oracle 19C学习 - 21. 物化视图

Oracle 19C学习 - 21. 物化视图

时间:2022-11-12 21:46:35浏览次数:35  
标签:21 -- 视图 物化 emp 刷新 Oracle refresh

什么是物化视图

Oracle物化视图是包括一个查询结果的数据库对象。它是一种非本地数据的本地化副本,或用来生成基于某种功能或者业务需求的汇总表。
物化视图存储基于非本地表的数据,也可以成为快照。她属于一种物理结构,具有段结构。

物化视图可以用于预先保存表连接或聚集等耗时较多操作的结果。这样进行查询时,可以避免这些耗时的操作。

物化视图的目的是为了提高查询性能。
物化视图对应用透明,增加和删除物化视图不会影响应用中SQL语句的正确性和有效性。
物化视图占用内存空间。
当基表发生变化时,物化视图也应当刷新。
物化视图可以查询表、视图、和其他物化视图。

物化视图相关的系统权限

授权

GRANT CREATE MATERIALIZED VIEW TO 用户;

撤销

REVOKE CREATE MATERIALIZED VIEW FROM 用户;

创建物化视图

CREATE MATERIALIZED VIEW 物化视图名
BUILD [immediate | deferred]
REFERSH [force | fast | complete | never]
FORCE ON [commit | demand]
START WITH 开始时间
NEXT 下次刷新时间
AS
查询语句

  • BUILD 创建方式

    • immediate 立即生效
    • deferred 推迟至第一次refresh才生效
  • REFERSH 物化视图刷新方式

    • force 默认。 如果可以fast就fast,不行就complete。
    • fast 只刷新增量部分。
    • complete 更新全部数据
    • never 从不刷新。
  • FORCE ON 刷新触发方式

    • commit 有数据提交时刷新,刷新视图不能跨库执行。
    • demand 根据start with 和 next的参数刷新。或者dbms_mview.refresh函数手动刷新。

dbms_mview.refresh手工刷新

BEGIN
dbms_mview.refresh(list => '物化视图' , method => 'COMPLETE' , refresh_after_errors => TRUE);
END;

删除物化视图

DROP MATERIALISED VIEW 物化视图名

-- 创建测试表emp
CREATE TABLE emp (
    id number,
    name varchar2(40)
);

-- 插入两条数据
INSERT INTO emp SELECT 1, 'LEO' FROM dual;
INSERT INTO emp SELECT 2, 'KEVIN' FROM dual;
COMMIT;

-- 创建物化视图
CREATE MATERIALIZED VIEW mv_emp
BUILD IMMEDIATE        
REFRESH FORCE          
ON DEMAND              
START WITH SYSDATE     
NEXT SYSDATE + 2/1440  
AS 
SELECT id, name FROM emp;

INSERT INTO emp SELECT 3, 'WINSTON' FROM DUAL;
COMMIT;

-- 表立即更新,物化视图延后更新。
SELECT * FROM MV_EMP;

-- 插入数据
INSERT INTO emp SELECT 4, 'GRACE' FROM DUAL;

-- 立即手工刷新,数据会被隐式提交

exec dbms_mview.refresh(list => 'mV_emp' , method => 'COMPLETE' , refresh_after_errors => TRUE);

DROP MATERIALIZED VIEW MV_EMP;
Materialized view MV_EMP已删除。

标签:21,--,视图,物化,emp,刷新,Oracle,refresh
From: https://www.cnblogs.com/slqleozhang/p/16884725.html

相关文章