[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
随机推荐
- lua绑定c++的时候常见得错误
1 Error parsing reanslation unit 这种情况,首先来说你的python 2.7以及他的插件安装是完整的,最可能的原因就是自己写的ini文件,header路径错误,可以把这 ...
- win8或win8.1修改注册表失败的原因
win8 and win8.1 modify the registry need compiled to be different versions according to the os bits.
- python常见环境安装
pyinotify安装git clone https://github.com/seb-m/pyinotify.gitcd pyinotify/python setup.py install 安装py ...
- 学习总结 html图片热点,网页划区,拼接,表单
表单: action="负责处理的 <form id="" name="" method="post/get"服务端&quo ...
- SQL 实现,如果存在就更新,如果不存在就添加
alter proc proc_DataSummary as begin begin try begin tran --PV --统计的信息存入临时表 ), CreateDate, ) ), Crea ...
- 关于MPEG2中的图像序列和图像组头GOP
图像序列 图像序列是由图像组构成的,是随机存取段落. sequence_header_code – The sequence_header_code is the bit string ‘000001 ...
- 操作系统学习笔记 对称多处理(SMP)
SMP:一种通过复用处理器提高程序执行并行性的方式. 根据SMP,计算机系统可以分为以下四类: 单指令单数据流(SISD):一个单处理器执行一个单指令流,对保存在一个存储器中的数据进程进行操作. 单指 ...
- C语言中的fread和fwrite
C语言中的fread和fwrite是专门用来操作文件的方法. 1. fread负责从打开的文件指针中读取文件内容. 函数原型:size_t fread(void *p, size_t size, si ...
- PHP实现物流查询(通过快递网API实现)
物流查询实现 引 言:目前快递公司太多了,不可能一个一个去申请api查询.这个时候,就可以通过合作,找一些中间商合作.我试了两家,一家是快递100,一家是快递网. 他们都需要申请key.但是快递100 ...
- maven auto-config 多环境自动打包
摘自:http://doc.okbase.net/bjhecwq/archive/118121.html maven有许多优秀的插件,最近在研究打包中替换多重环境的配置,同事介绍使用阿里的auto-c ...