轉:物化檢視(Materialized View)介紹

mengzhaoliang發表於2008-11-10

實體化試圖(Materialized View)介紹

實體化檢視概述

Oracle的實體化檢視提供了強大的功能,可以用在不同的環境中。在不同的環境中,實體化檢視的作用也不相同。資料倉儲中的實體化檢視主要用於預先計算並儲存表連線或聚集等耗時較多的操作的結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,而從快速的得到結果。在資料倉儲中,還經常使用查詢重寫(query rewrite)機制,這樣不需要修改原有的查詢語句,Oracle會自動選擇合適的實體化檢視進行查詢,完全對應用透明。實體化檢視和表一樣可以直接進行查詢。實體化檢視可以基於分割槽表,實體化檢視本身也可以分割槽。除了在資料倉儲中使用,實體化檢視還用於複製、移動計算等方面。實體化檢視有很多方面和索引很相似:使用實體化檢視的目的是為了提高查詢效能;實體化檢視對應用透明,增加和刪除實體化檢視不會影響應用程式中SQL語句的正確性和有效性;實體化檢視需要佔用儲存空間;當基表發生變化時,實體化檢視也應當重新整理。

建立實體化試圖主要選項說明

建立實體化檢視時可以指定多種選項,下面對幾種主要的選項進行簡單說明:

名稱 ON PREBUILD TABLE
描述 將已經存在的表註冊為實體化檢視。同時還必須提供描述建立該表的查詢的 SELECT 子句。可能無法始終保證查詢的精度與表的精度匹配。為了克服此問題,應該在規範中包含 WITH REDUCED PRECISION 子句。

名稱 Build Clause 建立方式
描述 包括BUILD IMMEDIATE和BUILD DEFERRED兩種
取值 BUILD IMMEDIATE 在建立實體化檢視的時候就生成資料
BUILD DEFERRED 在建立時不生成資料,以後根據需要在生成資料
預設 BUILD IMMEDIATE

名稱 Refresh 重新整理子句
描述 當基表發生了DML操作後,實體化檢視何時採用哪種方式和基表進行同步
語法
[refresh [fast | complete | force]
         [on demand | commit]
         [start with date]
         [next date]
         [with {primary key | rowid}]
]
取值 FAST 採用增量重新整理,只重新整理自上次重新整理以後進行的修改
COMPLETE 對整個實體化檢視進行完全的重新整理
FORCE(預設) Oracle在重新整理時會去判斷是否可以進行快速重新整理,如果可以則採用Fast方式,否則採用Complete的方式,Force選項是預設選項
ON DEMAND(預設) 實體化檢視在使用者需要的時候進行重新整理,可以手工透過DBMS_MVIEW.REFRESH等方法來進行重新整理,也可以透過JOB定時進行重新整理
ON COMMIT 實體化檢視在對基表的DML操作提交的同時進行重新整理
START WITH 第一次重新整理時間
NEXT 重新整理時間間隔
WITH PRIMARY KEY(預設)

生成主鍵實體化檢視,也就是說實體化檢視是基於表的主鍵,而不是ROWID(對應於ROWID子句)。 為了生成PRIMARY KEY子句,應該在表上定義主鍵,否則應該用基於ROWID的實體化檢視。主鍵實體化檢視允許識別實體化檢視表而不影響實體化檢視增量重新整理的可用性

WITH ROWID 只有一個單一的主表,不能包括下面任何一項:
●Distinct
●聚合函式
●Group by
●子查詢
●連線
●SET操作

名稱 Query Rewrite 查詢重寫
描述 包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE兩種。分別指出建立的實體化檢視是否支援查詢重寫。查詢重寫是指當對實體化檢視的基表進行查詢時,Oracle會自動判斷能否透過查詢實體化檢視來得到結果,如果可以,則避免了聚集或連線操作,而直接從已經計算好的實體化檢視中讀取資料
取值 ENABLE QUERY REWRITE 支援查詢重寫
DISABLE QUERY REWRITE 不支援查詢重寫
預設 DISABLE QUERY REWRITE

建立實體化試圖日誌主要選項說明

如果需要進行快速重新整理,則需要建立實體化檢視日誌。實體化檢視日誌根據不同實體化檢視的快速重新整理的需要,可以建立為ROWID或PRIMARY KEY型別的。還可以選擇是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

名稱 WITH Clause
描述
取值 OBJECT ID 如果是物件實體化檢視(object materialized view),則只能採用該方式
PRIMARY KEY
ROWID
SEQUENCE
預設

實體化試圖舉例

建立實體化檢視時應先建立儲存的日誌空間

  1. create materialized view log on table1   
  2.   
  3. tablespace ts_data --日誌儲存在特定的表空間   
  4.   
  5. with rowid;   

然後建立實體化檢視

  1. create materialized view mv_table1        
  2.       
  3. on prebuild table --將實體化檢視建立在一個已經存在的表上        
  4.       
  5. tablespace ts_data --儲存表空間        
  6.       
  7. build deferred --延遲重新整理不立即重新整理        
  8.       
  9. refresh force --如果可以快速重新整理則進行快速重新整理,否則完全重新整理        
  10.       
  11. on demand --按照指定方式重新整理        
  12.       
  13. as select * from table1;   

刪除實體化檢視日誌

  1. drop materialized view log on table1;   

刪除實體化檢視

  1. drop materialized view mv_table1;   

-----------------------------------------------------------

Tips:

A materialized view provides indirect access to table data by storing the results of a query in a separate schema object. Unlike an ordinary view, which does not take up any storage space or contain any data, a materialized view contains the rows resulting from a query against one or more base tables or views. A materialized view can be stored in the same database as its base tables or in a different database.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-490532/,如需轉載,請註明出處,否則將追究法律責任。

相關文章