物化视图
千里之行始于足下,梦想不付之行动,终究是纸上谈兵
经过一段时间的达梦DCP培训让学习了好多支持点。让我对达梦的理解更加深刻。
今天为大家说一说达梦数据的物化视图
视图的分类:简单视图、复杂视图、物化视图
简单视图和复杂视图不会占用磁盘空间,实际上就是一张虚拟表。真正的数据存放在基表当中,可是用 insert、update、delete 操作。
复杂视图:不允许直接 insert、update、delete ,因为复杂视图是通过几张表形成的一个视图,不能直接进行修改或删除。如果需要进行修改需要使用触发器来完成。
物化视图是从一个或几个源表导出的表,同视图相比,它存储了导出表的真是数据。当源表中的数据发生变化时,物化视图所存储的数据将变陈旧,用户可以通过手动刷新或自动刷新来对数据进行同步。
物化视图的限制:
1、物化视图不能包含集合操作。
2、物化视图不能定义包含有垂直分区的表
4、物化视图只能进行查询和创建索引,不支持插入,删除、更新、MERGE INTO 和 TRUNCATE
4、同一张表最多建立127个物化视图
5、包含物化视图的普通视图及游标是不能更新的
6、如果对某明细表进行了TRUNCATE操作,那么依赖与它的物化视图必须先进行一次完全刷新后才可以使用快速刷新
当物化视图中包含 :
1、集合操作(union,union all minus。。)
2、具有分组函数(min、max、sum、avg、count、) )
3、具有group by having start with等
4、具有distinct 关键字
5、 具有集合运算链接。
--创建视图
CREATE VIEW TEST.V1 AS SELECT * FROM DMHR.EMPLOYEE; --创建一个简单视图
SELECT * FROM TEST.V1; --查询视图V1
```sql
--创建复杂视图
CREATE VIEW TEST.V2 AS SELECT DISTINCT EMPLOYEE.DEPARTMENT_ID FROM DMHR.EMPLOYEE; --创建复杂视图
SELECT * FROM TEST.V2; --查询视图v2
delete from TEST.V2; --复杂视图不能删除或这修改;
--创建简单视图进行删除操作
CREATE TABLE TEST.T10 AS SELECT * FROM TEST.T_R9; --创建一个T10表复制T_R9数据
SELECT * FROM TEST.T10; --查询T10表是否存在
CREATE VIEW TEST.V3 AS SELECT * FROM TEST.T10; --创建v3视图
DELETE FROM TEST.V3; --删除V3S视图数据
ROLLBACK; --回滚数据
物化视图
物化视图的数据会单独存储,占用磁盘空间,需要把物化视图放在表空间里面。
物化视图的数据来自基表,基表发生改变,物化视是否改变。
物化视图更新方式:手动(默认方式)demand 自动更新 commit
物化视图自动更新的方式: fast (快速更新 )、 complete(完全更新)、 force 选则更新 、never (不更新 )
--创建物化视图
CREATE MATERIALIZED VIEW TEST.MV1 AS SELECT * FROM DMHR.EMPLOYEE ; --创建物化视图
CREATE MATERIALIZED VIEW TEST.MV2 STORAGE (ON TBS1 ) AS SELECT * FROM TEST.T10 ; --创建物化视图 数据存放在TBS1表空间
update TEST.T10 SET NAME ='AAA' WHERE ID=1 --修改数据
COMMIT;
SELECT * FROM TEST.MV2 --发现物化视图没有更新。
–如果没有指定刷新的形式,物化视图不会自动刷新。不会自动更新数据。需要手动去刷新。on demand + force
refresh materialized view TEST.MV2; --手动刷新物化视图。
--自动更新物化视图(需要创建物化视图的日志)
create MATERIALIZED view log on test.T10; --创建物化视图需要基表有主键。
alter table test.t10 add CONSTRAINT pk PRIMARY KEY(id); --给基表创建主键
CREATE MATERIALIZED VIEW TEST.MV3 REFRESH FAST ON COMMIT AS SELECT * FROM TEST.T10; --创建自动刷新的物化视图 on commit +fast
update TEST.T10 SET NAME ='AAA' WHERE ID=4 --修改数据
commit; --提交数据
--达梦数据物化视图更新非常慢。需要手动去更新视图。
--创建基于完全更新(COMPLETE) +自动更新的方式(ON COMMIT)
CREATE MATERIALIZED VIEW TEST.V4 STORAGE (ON TBS2) REFRESH COMPLETE ON COMMIT AS SELECT * FROM TEST.T10;
SELECT * FROM SYS.USER_MVIEWS WHERE USER_MVIEWS.MVIEW_NAME='V4';
-创建物化视图基于时间的更新
CREATE MATERIALIZED VIEW TEST.MV5 STORAGE(ON TBS3) REFRESH FAST START WITH SYSDATE() NEXT SYSDATE()+1 AS SELECT * FROM TEST.T10;
--物化视图上可以创建索引,提高查询的速度。
CREATE INDEX MV3_INDEX ON TEST.MV3 (ID);
以上时通过学习达梦DCP几天掌握的只是。谢谢大家观看。有什么问题请大家及时和本人沟通。