[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
随机推荐
- jxl的API
jxl的API 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Exce ...
- Android——显示单位px和dip以及sp的区别
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素.d ...
- Android——主流分辨率
VGA:480*640 QVGA:240*320 HVGA:320*480 WVGA:480*800 FWVGA:480*854 IntelHaxm.exe 模拟器加速器
- Appium输入中文的问题,简单的方法
经常有人问,Appium怎么输入中文,下面提供一种相对简单的方式. 以前曾经提到过capabilities关键字,里面有这样2个属性, |`unicodeKeyboard`| 使用 Unicode 输 ...
- Basler usb SDK安装在opencv采集图像
近期,入手一台baslerUSB接口的CCD相机,但是貌似之前图像采集的编程无法调动其摄像头,在网上搜了一下,大家的说法就是安装它的SDK文件包,并且调用它内部函数编写代码.其实新版的Basle相机驱 ...
- Flex应用一览表
1.Flex控件之repeater和radioButton控件应用 2.Flex之DataGrid和Tree控件的数据源XML格式 3.Flex控件之combobox应用 4.转:Flex的Arra ...
- windows7 下的日期没有internet时间的选项卡
原因1:你在某个域里面,退出就可以了 原因2:你把windows Time的服务给禁掉或者关掉了, 步骤:运行,输入services.msc 确定,查找到windows Time开了即可
- ORACLE 导空表结构
exp username/psd@sid file='E:\xx.dmp' tables=(xxx_%) ROWS=N 以下代码没什么用,我就乱写 set oracle_sid=ora11gsqlpl ...
- Ext.Net 破解
在使用 Ext.Net 框架时,如果没有得到正版授权(安装密钥),在站点发布后,打开界面总是弹出一个窗口,提示没有授权,看着都头疼,难道一定要安装密钥吗?但还是有办法解决的,在研究时发现,页面中多了两 ...
- 学习练习 java输入输出流 练习题1
.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package com.hanq ...