oracle物化视图(materialized view)

 

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:微软雅黑; panose-1:2 11 5 3 2 2 4 2 2 4; mso-font-charset:134; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-2147483001 705641554 22 0 262175 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@微软雅黑"; panose-1:2 11 5 3 2 2 4 2 2 4; mso-font-charset:134; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-2147483001 705641554 22 0 262175 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; mso-themecolor:hyperlink; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {mso-style-noshow:yes; mso-style-priority:99; color:purple; mso-themecolor:followedhyperlink; text-decoration:underline; text-underline:single;} p {mso-style-noshow:yes; mso-style-priority:99; mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

http://blog.csdn.net/XIAOHUI_LIAO/archive/2007/08/27/1759990.aspx

create materialized view [view_name]
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{
创 建物化视图用的查询语句}

以上是Oracle 创建物化视图(Materialized View, 以下简称MV )时的常用语法, 各参数的含义如下:

1.refresh [fast|complete|force] 视图刷新的方式:
fast:
增量刷新 . 假设前一次刷新的时间为t1, 那么使用fast 模式刷新物化视图时, 只向视图中添加t1 到当前时间段内, 主表变化过的数据. 为了记录这种变化, 建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on (主表名)。
complete:
全部刷新 。相当于重新执行一次创建视图的查询语句。
force:
这是默认的数据刷新方式。当可以使用fast 模式时,数据刷新将采用fast 方式;否则使用complete 方式。

2.MV 数据刷新的时间:
on demand :
在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job 定时刷新)
on commit :
当主表中有数据提交的时候,立即刷新MV 中的数据;
start ……
:从指定的时间开始,每隔一段时间(由next 指定)就刷新一次;

Oracle 的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗 时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影 响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 

物化视图可以分为以下三 种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视 图时可以指定多种选项,下面对几种主要的选择进行简单说明:

创建方式(Build Methods ):包括BUILD IMMEDIATE BUILD DEFERRED 两种。BUILD IMMEDIATE 是在创建物化视图的时候就生成数据,而BUILD DEFERRED 则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE 

查询重写(Query Rewrite ):包括ENABLE QUERY REWRITEDISABLE QUERY REWRITE 两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle 会自动判断能否通过查询物化视图 来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE

刷 新(Refresh ):指当基表发生了DML 操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMANDON COMMIT ON DEMAND 指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH 等方法来进行刷新,也可以通过JOB 定时进行刷新。 ON COMMIT 指出物化视图在对基表的DML 操作提交的同时进行刷新。刷新的方法有四种:FASTCOMPLETEFORCENEVE***ST 刷 新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE 刷新对整个物化视图进行完全的刷新。如果选择FORCE 方式,则Oracle 在刷新时 会去判断是否可以进行快速刷新,如果可以则采用FAST 方式,否则采用COMPLETE 的方式。NEVER 指物化视图不进行任何刷新。默认值是FORCE ON DEMAND 

在建立物化视图的时候可以指定ORDER BY 语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。 

物化视图日志:如果 需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWIDPRIMARY KEY 类型的。还可以选择是否包括SEQUENCEINCLUDING NEW VALUES 以及指定列的列表。 

可以指明ON PREBUILD TABLE 语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要 求参数QUERY_REWRITE_INTEGERITY 必须设置为trusted 或者stale_tolerated 

物化视图可以 进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT )。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。 对于聚集物化视图,可以在GROUP BY 列表中使用CUBEROLLUP ,来建立不同等级的聚集物化视图。

物化视图的基本操作和使用 可以查看网址:http://blog.itpub.net/post/468/13318 相关的东东。我主要说明一下使用物化视图的基本东东。如如何建立在特定的表空间上,这些在其他的物化视图上面几乎都没有任何介绍的。主要以我做的一个例子 来操作,
如果对物化视图的基本概念清楚了就比较明白在那里写特定的表空间存储了。 

创建物化视图时应先创建存储的日志空间

CREATE MATERIALIZED VIEW LOG ON mv_lvy_levytaxbgtdiv 
tablespace ZGMV_DATA --
日志保存在特定的表空间 
WITH ROWID ;
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydetaildata 
tablespace ZGMV_DATA --
日志保存在特定的表空间 
WITH ROWID,sequence(LEVYDETAILDATAID); 
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydata 
tablespace ZGMV_DATA --
日志保存在特定的表空间 
WITH rowid,sequence(LEVYDATAID); 
然后创建物化视图 
--
创建物化视图 
create materialized view MV_LVY_LEVYDETAILDATA 
TABLESPACE ZGMV_DATA --
保存表空间 
BUILD DEFERRED --
延迟刷新不立即刷新 
refresh force --
如果可以快速刷新则进行快速刷新,否则完全刷新 
on demand --
按照指定方式刷新 
start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --
第一次刷新时间 
next TRUNC(SYSDATE+1)+18/24 --
刷新时间间隔 
as 
SELECT levydetaildataid, detaildatano, taxtermbegin, taxtermend, 
...... 
ROUND(taxdeduct * taxpercent1, 2) - ROUND(taxdeduct * taxpercent2, 2) - 
ROUND(taxdeduct * taxpercent3, 2) - ROUND(taxdeduct * taxpercent4, 2) -
ROUND(taxdeduct * taxpercent5, 2) taxdeduct, ROUND(taxfinal * taxpercent1, 2) -
ROUND(taxfinal * taxpercent2, 2) - ROUND(taxfinal * taxpercent3, 2) - 
ROUND(taxfinal * taxpercent4, 2) - ROUND(taxfinal * taxpercent5, 2) taxfinal, 
a.levydataid, a.budgetitemcode, taxtypecode, 
......
FROM tb_lvy_levydetaildata a, tb_lvy_levydata c, MV_LVY_LEVYTAXBGTDIV b
WHERE a.levydataid = c.levydataid
AND a.budgetdistrscalecode = b.budgetdistrscalecode
AND a.budgetitemcode = b.budgetitemcode
AND c.incomeresidecode = b.rcvfisccode
AND C.TAXSTATUSCODE='08' 
AND C.NEGATIVEFLAG!='9'
删 除物化视图日志 
--
删除物化视图: 
--
删除日志: DROP materialized view log on mv_lvy_levytaxbgtdiv; 
DROP materialized view log on tb_lvy_levydetaildata; 
DROP materialized view log on tb_lvy_levydata; 
--
删除物化视图 drop materialized view MV_LVY_LEVYDETAILDATA;
--
基本和对表的操作一致 -- 物化视图由于是物理真实存在的,故可以创建索引。
创建方式 和对普通表创建方式相同,就不在重复写了。 

你可能感兴趣的:(oracle,存储,query,Build,微软,methods)