本文将介绍达梦数据库物化视图,给出其概念及相关创建、使用示例。
物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本,占用存储空间,即将查询出来的数据存储在数据库中。当所依赖的一个或多个基表的数据发生更新,必须启用刷新机制才能保证数据是最新的。
物化视图可以用于数据复制(Data Replication),也可用于数据仓库缓存结果集以此来提升复杂查询的性能。
注意
START WITH 或者 NEXT 均不指定,不会**自动执行**物化视图刷新。
按物化视图的使用场景,主要分为如下五大类:
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;
查询结果如下:
当基表上有 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:
支持快速刷新的物化视图,称为复杂物化视图。以下均为不能创建复杂物化视图场景,具体限制为:
首先,本文介绍了达梦数据库物化视图概念及其关键参数;
其次,介绍物化视图和物化视图日志创建及示例;
最后,介绍了复杂物化视图限制。
本文只是抛砖引玉,在实际应用中请参考达梦数据库官网文档物化视图相关介绍。
关于达梦数据库更多学习内容,欢迎访问达梦社区:
https://eco.dameng.com