[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
随机推荐
- 解决Git报错:The current branch is not configured for pull No value for key branch.master.merge found in configuration
1.在本地工程目录找到config文件(我的是在D:\git\demo\.git):2.修改config文件内容为: [core] repositoryformatversion = 0 filemo ...
- Java GUI 画点
import java.awt.EventQueue; public class Paint { private JFrame frame; /** * Launch the application. ...
- JS浮点数运算BUG破法
JS里,0.3*3 = 0.8999999999999999 破法1:((0.3*10)*3)/10 破法2:(0.3*3).toFixed(2)//保留两位小数 原因:js浮点数用的是IEEE754 ...
- 剑指Offer:面试题16——反转链表(java实现)
问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...
- C and C++ 如何嵌套使用
1. 要知道extern "C"的含义: (1) extern是C/C++中表明函数和全局变量作用范围的关键字, 该关键字表明其申明的函数和变量可以在本模块或者其他模块中使用. ( ...
- 关于conversation generation的论文笔记
对话模型此前的研究大致有三个方向:基于规则.基于信息检索.基于机器翻译.基于规则的对话系统,顾名思义,依赖于人们周密设计的规则,对话内容限制在特定领域下,实际应用如智能客服,智能场馆预定系统.基于信息 ...
- 《锋利的jQuery》
学jQuery,向大家推荐一本书: 我读的书少,看见这样的解释不能立即解决我的困惑真的很烦. 还是动手最实际. 接下来会分多个文章举例分析各个方法的使用与效果. 大家可以到http://api.jqu ...
- Hive On Spark和SparkSQL
SparkSQL和Hive On Spark都是在Spark上实现SQL的解决方案.Spark早先有Shark项目用来实现SQL层,不过后来推翻重做了,就变成了SparkSQL.这是Spark官方Da ...
- JavaScript DOM编程艺术学习笔记(一)
嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...
- import的用法
转自python学习笔记--模块和命名空间 模块(module)是Python中非常重要的一个概念,模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的 ...