[terry笔记]物化视图 materialized view基础学习
一、物化视图定义摘录:
物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用。而且在数据仓库中使用到重写机制,对于用户来说,Oracle会自己选择合适的物化视图进行查询,不需要重新写SQL。
物化视图还可以进行远程数据的的本地复制,此时的物化视图存储也可以称为快照。可是用于实施数据库间的同步。通常情况下,物化视图用于复制的时候为“主表”,而在运用于数据仓库时称为“明细表”。
其物理意义:
(1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;
(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;
(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;
物化视图相关的参数:
COMPATIBLE 需大于 8.1.0
QUERY_REWRITE_ENABLED = TRUE 开启查询重写(默认
QUERY_REWRITE_INTEGRITY =
ENFORCED - 查询仅用Oracle强制与保证的约束、规则重写(默认);
TRUSTED – 查询除用Oracle强制与保证的约束、规则,也可用用户设定的数据间的任何关系来重写;
STALE_TOLERATED – 即便Oracle知道物化视图中数据过期(与事实表等不同步),也重写查询。
JOB_QUEUE_PROCESSES,必须设置大于 1。
OPTIMIZER_MODE,必须设置成CBO的某种方式。
二、物化视图的创建
1.创建物化视图时应先创建物化视图日志,主要是为了可以让物化视图进行fast刷新,最好让日志放在一个单独的表空间
create table t1 as select * from dba_objects;
alter table t1 add constraint pk_t1 primary key (object_id); create materialized view log on t1 tablespace users;
create materialized view mv1 refresh force on commit as select * from t1; select * from user_mview_logs;
drop materialized view log on t1; select * from user_mviews;
drop materialized view mv1;
-----创建物化视图日志具体语法
CREATE MATERIALIZED VIEW LOG ON table_name
TABLESPACE tablespace_name
WITH primary key/rowid;
primary key 和 rowed
PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键。
PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图。
主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。
Rowid物化视图只有一个单一的主表,不能包括“Distinct、聚合函数、Group by、子查询、连接、SET操作”
-----创建物化视图具体语法
CREATE MATERIAILZED VIEW my_materialized
TABLESPACE tablespace_name /*保存表空间*/
BUILD immediate/deferred /*是否立刻生成数据*/
enable/disable QUERY REWRITE /*是否开启查询重写*/
REFRESH force/fast/complete /*刷新模式*/
ON demand/commit /*按照指定方式刷新*/
START WITH to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') /*第一次刷新时间*/
NEXT TRUNC(SYSDATE+1)+18/24 /*刷新时间间隔*/
WITH primary key/rowid
AS SELECT …
创建方式(Build Methods): 包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。
查询重写(Query Rewrite): 包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。
刷新(Refresh): 指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。
--刷新的模式有两种:ON DEMAND和ON COMMIT。
1)ON DEMAND(默认)指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH START WITH NEXT等方法来进行刷新,也可以通过JOB定时进行刷新。
2)ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。
--刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。
1)FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改,需要建立primary key或者rowid类型的物化视图日志。
2)COMPLETE刷新对整个物化视图进行完全的刷新(先truncate)。
3)FORCE(默认),在刷新时会判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。
4)NEVER指物化视图不进行任何刷新。
刷新例子:
SQL> create materialized view mv_name refresh force on demand start with sysdate next sysdate+1;
/*创建定时刷新的物化视图(指定物化视图每天刷新一次)*/ SQL> create materialized view mv_name refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss');
/*指定具体刷新时间(如每天晚上10:00定时刷新一次)*/ SQL>execute dbms_mview.refresh(‘EMP_BY_DISTRICT’);
/*刷新指定的物化视图*/ SQL>execute dbms_mview.refresh_defresh_dependent(‘EMPLOYEE’);
/*刷新利用了该表的所有物化视图*/ SQL>execute dbms_mview.refresh_all_mviews;
/*刷新该模式中,自上次刷新以来,未得到刷新的所有物化视图*/
其他一些物化视图高级用法(待续):
基于物理表的物化视图:
可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGRITY必须设置为trusted或者stale_tolerated。
包含聚集的物化视图;
只包含连接的物化视图;
嵌套物化视图。
[terry笔记]物化视图 materialized view基础学习的更多相关文章
- [terry笔记]Oracle会话追踪(二):TKPROF
接上一笔记[terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046 http://www.cnblogs.com/kkterry/p/3279282.html ...
- [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046
SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...
- 物化视图(materialized view) 实现数据迁移、数据定时同步
近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...
- [terry笔记]Oracle10g/11g安装-redhat5.5
操作系统准备工作 其实真正的进入图形界面安装是简单的,只是前期的配置比较繁琐,如版本.空间.位置.软件包.用户.环境变量.内核参数,这里主要讨论前期配置. 10g与11g的单实例安装基本一样,主要区别 ...
- [terry笔记]Oracle数据泵-schema导入导出
数据泵是10g推出的功能,个人倒数据比较喜欢用数据泵. 其导入的时候利用remap参数很方便转换表空间以及schema,并且可以忽略服务端与客户端字符集问题(exp/imp需要排查字符集). 数据泵也 ...
- [terry笔记]IMPDP报错ORA-39083 Object type TYPE failed to create ORA-02304
今天在使用impdp导入的时候(同一数据库中转换schema),遇到了 ORA-39083: Object type TYPE failed to create with error: ORA-023 ...
- [terry笔记]一个在线美化sql的网站
http://www.dpriver.com/pp/sqlformat.htm 甚是好用.
- DB2物化视图(Materialized Query Tables, MQT)
DB2的物化视图MQT是基于查询结果定义的一个表,MQT中包括的数据来自MQT定义所基于的一个或多个表, 使用MQT能够显著提高查询的操作性能. 数据库的视图和MQT都是基于一个查询来定义的.每当视图 ...
- PLSQL_Oracle物化视图Material View的基本概念和用法 (概念)
2014-06-08 Created By BaoXinjian
随机推荐
- js和jQuery前台校验文件大小
1.支持Google 不支持IE <script type="text/javascript" src="${pageContext.request.context ...
- DP Hrbust1186青蛙过河
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1186 #include<st ...
- [Java] 我的Coding Style 总结
1. 缩进 采用4个空格的缩进方式 2. tab 不采用"hard" tab. 需要更改编辑器的默认配置.将tab值改成4个空格. 3. 换行 3.1 一行不超过75个字符 3.2 ...
- 为网站加入Drupal星球制作RSS订阅源
目前中文 Drupal 星球的版块还未成立,但大家的积极性挺高,不少站长都已经调整好自己的网站,生成了可供Drupal Planet 使用的RSS订阅源. 如果你也想让网站做好准备,可以不必再花上不少 ...
- Creating Icon Overlay Handlers / 创建图标标记 Handlers (翻译自MSDN) / VC++, Windows, DLL, ATL, COM
创建图标标记 Handlers Creating Icon Overlay Handlers 图标标记是放在代表着某个 Shell 对象的图标之左下角的小图像.它们通常被加在一个对象的图标的身上来提供 ...
- 【测试】模拟一个全表扫描的sql,对其进行优化走索引,并且将执行计划稳定到baseLine。
①创建表t3: SQL> create table t3 (id int); Table created. SQL; rows created. ②开启自动捕获并修改时间格式: SQL> ...
- IIS装好了无法访问localhost
解决办法: [1]: 检查你的DTC服务(全名:Distributed Transaction Coordinator)是否可以正常启动 ...
- C语言中的fread和fwrite
C语言中的fread和fwrite是专门用来操作文件的方法. 1. fread负责从打开的文件指针中读取文件内容. 函数原型:size_t fread(void *p, size_t size, si ...
- ASPXGridView用法
一.ASPXGridView外观显示 属性: Caption----列的标题( KeyFieldName----数据库字段 SEOFriendly 是否启用搜索引擎优化 Summary 指定分页汇总信 ...
- OS版本调研
1引言 1.1 编写目的 本文的主要目的是通过对当前项目中使用的各种版本的操作系统进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为当前的标准系统. 1.2 背景 当前,部门负责管理维护的现网使 ...