首页 > 其他分享 >openGauss学习笔记-45 openGauss 高级数据管理-物化视图

openGauss学习笔记-45 openGauss 高级数据管理-物化视图

时间:2023-08-20 10:02:55浏览次数:43  
标签:-- MATERIALIZED 45 视图 物化 openGauss VIEW

openGauss学习笔记-45 openGauss 高级数据管理-物化视图

物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。

按照刷新方式物化视图分为两种:

  • 全量物化视图:仅支持对已创建的物化视图进行全量更新,而不支持进行增量更新。创建全量物化视图语法和CREATE TABLE AS语法类似。
  • 增量物化视图:可以对物化视图增量刷新,需要用户手动执行语句完成对物化视图在一段时间内的增量数据刷新。与全量创建物化视图的不同在于目前增量物化视图所支持场景较小。目前物化视图创建语句仅支持基表扫描语句或者UNION ALL语句。

45.1 全量物化视图

45.1.1 全量物化视图语法格式

  • 创建全量物化视图

    CREATE MATERIALIZED VIEW view_name AS query; 
    
  • 全量刷新物化视图

    REFRESH MATERIALIZED VIEW [ view_name ];
    
  • 删除物化视图

    DROP MATERIALIZED VIEW [ view_name ];
    
  • 查询物化视图

    SELECT * FROM [ view_name ];
    

45.1.2 全量物化视图参数说明

  • view_name

    要创建的物化视图的名称。

  • AS query

    一个SELECT、TABLE 或者VALUES命令。

45.1.3 全量物化视图示例

--准备数据。
openGauss=# CREATE TABLE t1(c1 int, c2 int);
openGauss=# INSERT INTO t1 VALUES(1, 1);
openGauss=# INSERT INTO t1 VALUES(2, 2);

--创建全量物化视图。
openGauss=# CREATE MATERIALIZED VIEW mv AS select count(*) from t1;
CREATE MATERIALIZED VIEW

--查询物化视图结果。
openGauss=# SELECT * FROM mv;
 count 
-------
     2
(1 row)

--向物化视图的基表中插入数据。
openGauss=# INSERT INTO t1 VALUES(3, 3);
INSERT 0 1

--对全量物化视图做全量刷新。
openGauss=# REFRESH MATERIALIZED VIEW mv;
REFRESH MATERIALIZED VIEW

--查询物化视图结果。
openGauss=# SELECT * FROM mv;
 count 
-------
     3
(1 row)

--删除物化视图。
openGauss=# DROP MATERIALIZED VIEW mv;
DROP MATERIALIZED VIEW

45.2 增量物化视图

45.2.1 增量物化视图语法格式

  • 创建增量物化视图

    CREATE INCREMENTAL MATERIALIZED VIEW  view_name  AS  query ; 
    
  • 全量刷新物化视图

    REFRESH MATERIALIZED VIEW [ view_name ];
    
  • 增量刷新物化视图

    REFRESH INCREMENTAL MATERIALIZED VIEW [ view_name ];
    
  • 删除物化视图

    DROP MATERIALIZED VIEW [ view_name ];
    
  • 查询物化视图

    SELECT * FROM [ view_name ];
    

45.2.2 增量物化视图参数说明

  • view_name

    要创建的物化视图的名称。

  • AS query

    一个SELECT、TABLE 或者VALUES命令。

45.2.3 增量物化视图示例

--准备数据。
openGauss=# CREATE TABLE t1(c1 int, c2 int);
openGauss=# INSERT INTO t1 VALUES(1, 1);
openGauss=# INSERT INTO t1 VALUES(2, 2);

--创建增量物化视图。
openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW mv AS SELECT * FROM t1;
CREATE MATERIALIZED VIEW

--插入数据。
openGauss=# INSERT INTO t1 VALUES(3, 3);
INSERT 0 1

--增量刷新物化视图。
openGauss=# REFRESH INCREMENTAL MATERIALIZED VIEW mv;
REFRESH MATERIALIZED VIEW

--查询物化视图结果。
openGauss=# SELECT * FROM mv;
 c1 | c2 
----+----
  1 |  1
  2 |  2
  3 |  3
(3 rows)

--插入数据。
openGauss=# INSERT INTO t1 VALUES(4, 4);
INSERT 0 1

--全量刷新物化视图。
openGauss=# REFRESH MATERIALIZED VIEW mv;
REFRESH MATERIALIZED VIEW

--查询物化视图结果。
openGauss=# select * from mv;
 c1 | c2 
----+----
  1 |  1
  2 |  2
  3 |  3
  4 |  4
(4 rows)

--删除物化视图。
openGauss=# DROP MATERIALIZED VIEW mv;
DROP MATERIALIZED VIEW

标签:--,MATERIALIZED,45,视图,物化,openGauss,VIEW
From: https://blog.51cto.com/shuchaoyang/7157903

相关文章

  • DsReplicaGetInfo() failed with status 8453 (0x2105): Replication access was d
    Whenusingthe repadmin/showrepl commandtocheckreplicationhealthstatusonyourWindowsdomainenvironmentincommandpromptonSindowsServerendofresultyoumayseethefollowingerrormessage:DsReplicaGetInfo()failedwithstatus8453(0x2105):......
  • SQL Server 批量导出存储过程、视图和函数
    selecta.name,a.[type],b.[definition]FROMsys.all_objectsa,sys.sql_modulesbwherea.is_ms_shipped=0anda.object_id=b.object_idanda.[type]in('P','V','AF')orderbya.[name]asc当type为‘P’时,为存储过程当 type为‘V’......
  • openGauss学习笔记-44 openGauss 高级数据管理-存储过程
    openGauss学习笔记-44openGauss高级数据管理-存储过程存储过程是能够完成特定功能的SQL语句集。用户可以进行反复调用,从而减少SQL语句的重复编写数量,提高工作效率。44.1语法格式创建存储过程CREATEPROCEDUREprocedure_name[({[argname][argmode]argtype[......
  • 【LeetCode1454. 活跃用户】MySQL 用户自定义变量,面向过程编程解决"连续天数"的问题
    目录题目地址题目描述代码题目地址https://leetcode.cn/problems/active-users/description/题目描述活跃用户是指那些至少连续 5天登录账户的用户。编写解决方案, 找到活跃用户的id和name。返回的结果表按照id排序 。代码注意需要处理,同一天多次登录的情形......
  • openGauss学习笔记-43 openGauss 高级数据管理-事件触发器
    openGauss学习笔记-43openGauss高级数据管理-事件触发器触发器会在指定的ddl事件发生时自动执行函数。目前事件触发器仅在PG兼容模式下可用。43.1语法格式创建事件触发器。CREATEEVENTTRIGGERnameONevent[WHENfilter_variableIN(filter_value[,...])......
  • ARC145C 题解
    problem&blog。小清新结论题。提供一个不需要脑子就可以AC的方法:看样例解释,猜到一定是\((1,2)(3,4)\)这样子,于是暴力,把前几项输进OEIS里,做完了。显然取\(\forall|A_i-B_i|=1\)最优。证明:对于\(x-3,x-2,x-1,x\),配对:\((x-3,x-2)(x-1,x)\)的贡献为\((x-3)(x-2)+......
  • CF1845E
    原题翻译首先我们容易发现如果给每个球一个编号,他的相对位置是不变的于是我们不妨把原问题转化为一个常为\(k\)严格递增的序列\(b_i\)表示这\(k\)的球的位置我们发现如果递推操作次数显然不记录序列的状态的话是比较难办的。于是我们考虑正难则反,考虑对于一个序列\(c_i\),判断......
  • MySQL-进阶篇 ( 视图 + 存储过程 + 触发器 )
    MySQL-进阶篇(视图/存储过程/触发器)目录MySQL-进阶篇(视图/存储过程/触发器)视图/存储过程/触发器视图介绍视图大体语法视图的检查选项CASCADED和LOCAL视图的更新作用案例存储过程介绍特点语法变量系统变量用户定义变量局部变量if语句参数case语句三种循......
  • openGauss学习笔记-42 openGauss 高级数据管理-触发器
    openGauss学习笔记-42openGauss高级数据管理-触发器触发器会在指定的数据库事件发生时自动执行函数。42.1语法格式创建触发器CREATETRIGGERtrigger_name{BEFORE|AFTER|INSTEADOF}{event[OR...]}ONtable_name[FOR[EACH]{ROW|STATEMENT......
  • 当 GPT-4 拥有了 Diff 视图,那真的是如虎添翼!
    目录1.当你要求GPT-4帮你写点代码时2.你需要的背景知识都在这里2.1关于GoPool和DevChat2.2关于GoPool的工作原理2.3我想要让taskQueue的大小可配置3.用Diff视图来看GPT-4写的新代码4.通过Diff内容让GPT-4总结CommitMessage5.总结1.当你要求GPT-4帮......