[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
随机推荐
- JAVA设计模式之单一职责原则
概念: 就一个类而言应该只有一个因其他变化的原因. 流程: 问题由来:设类或接口类C负责两个不同不同的职责:职责T1,职责T2.当由于职责T1需求改变进而需要修改类C时,可能导致职责T2收到不可预知的 ...
- Gradle用户指南(章8:依赖关系管理基础)
章8:依赖关系管理基础 本章将介绍一些gradle依赖关系管理的基础 什么是依赖关系管理? 简略的说,依赖管理是由两部分组成的.首先,gradle需要知道你要构建或者运行的项目,以便找到它们.我们将这 ...
- 003.ASP.NET MVC集中管理Session
原文链接:http://www.codeproject.com/Tips/790387/Session-in-ASP-NET-MVC 1.前言 今天有得有失啊,看到这篇,专心记下里面的精华吧 2.一般 ...
- Windows环境Mycat数据库分库分表中间件部署
下载地址MYCAT官方网站 jdk安装配置 首先去oracle官网下载并安装jdk8,添加环境变量,JAVA_HOME设置为D:\Worksoftware\Java\jdk1.8 CLASSPATH设 ...
- iOS调试 LLDB
LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件. 常用调试命令: 1.print命 ...
- USACO Section 3.2 01串 Stringsobits
题目背景 考虑排好序的N(N<=31)位二进制数. 题目描述 他们是排列好的,而且包含所有长度为N且这个二进制数中1的位数的个数小于等于L(L<=N)的数. 你的任务是输出第i(1< ...
- mysql 二进制安装文件 下载
在linuex环境下安装mysql,二进制安装包是最合适的方式,下载下来不用编译就可用了. 官方说明文档:http://dev.mysql.com/doc/refman/5.1/en/binary-i ...
- javascript设计模式-组合模式
组合模式所要解决的问题: 可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象. 客户端代码必须区别对象简单对象和 ...
- c++ 类模版、成员函数模版、函数模版 用法
C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 templa ...
- Windows下Qt连接MySql数据库
1.设置环境变量,需添加如下的环境变量: 2.打开Qt Command Prompt,输入第一条命令:cd %QTDIR%\src\plugins\sqldrivers\mysql 后按回车 ...