Oracle筆記-物化視圖
2024-08-29 13:37:15
供稿:網友
 
               第 13 章 物化視圖  8.1.5企業版/個人版開始支持  需要權限:GRANT CREATE MATERIALIZED VIEW,還必須直接賦予GRANT QUERY REWRITE.為實現查詢重寫,必須使用CBO.                                                                                              13.1 物化視圖如何工作  設置  COMPATIBLE參數必須高于8.1.0QUERY_REWRITE_ENABLED = TRUEQUERY_REWRITE_INTEGRETY =  ENFORCED - 查詢僅用Oracle強制與保證的約束、規則重寫;  TRUSTED – 查詢除用Oracle強制與保證的約束、規則,也可用用戶設定的數據間的任何關系來重寫;  STALE_TOLERATED – 即便Oracle知道物化視圖中數據過期(與事實表等不同步),也重寫查詢。  創建物化視圖的用戶必須具有直接賦予的GRANT QUERY REWRITE權限,不能通過角色繼續。  內部機制  全文匹配  部分匹配:從FROM子句開始,優化器比較之后的文本,然后比較SELECT列表  一般重寫方法:  數據充分  關聯兼容  分組兼容  聚集兼容  13.2 確保使用物化視圖  約束  考慮到現實環境的數據量,可以將主鍵、外鍵、非空等約束置為NOVALIDATE,并調整QUERY_REWRITE_INTEGRITY為TRUSTED,這樣可以達到“欺騙”數據庫的目的,但必須注重假如無法保證此類約束的真實有效,查詢改寫后可能造成結果不精確。  維度  實際就是指明已存在的表中各列的歸并關系,從而關聯事實表后形成的物化視圖可用于向“上”歸并(相當于用表中代表更高歸并關系的列關聯事實表)。標準語法:CREATE DIMENSION time_hierarchy_dim  LEVEL day      IS time_hierarchy.day  LEVEL mmyyyy   IS time_hierarchy.mmyyyy  LEVEL yyyy     IS time_hierarchy.yyyyHIERARCHY time_rollup(day CHILD OF mmyyyy CHILD OF yyyy)ATTRIBUTE mmyyyyDETERMINES mon_yyyy;  13.3 DBMS_OLAP  估計(物化視圖)大小  DBMS_OLAP.ESTIMATE_SUMMARY_SIZE(視圖名, 視圖定義, 估計行數, 估計字節數);  其中后兩個參數為NUMBER型輸出參數。  維度有效性檢查  DBMS_OLAP.VALIDATE_DIMENSION(視圖名, 用戶名, FALSE, FALSE);  SELECT * FROM 維度表名  WHERE ROWIN IN (SEELCT bad_rowid FROM MVIEW$_EXCEPTION);  所選出行即為不符合維度定義的行。  推薦物化視圖  首先必須添加合適的外鍵,包通過外鍵來判定表之間的關系而不是維度。  DBMS_OLAP.RECOMMEND_MV(事實表名, 1000000000, ‘’);  第二個參數表示物化視圖可用的空間大小,可傳入一個較大的數。第三個參數傳入需要保留的特定物化視圖,傳入空即為不考慮其他物化視圖。  執行C:/oracle/RDBMS/demo/sadvdemo后執行:  DEMO_SUMADV.PRETTYPRINT_RECOMMENDATIONS  13.4 最后說明  物化視圖不為OLTP系統設計  在事實表等更新時會導致物化視圖行鎖,從而影響系統并發性。