ORACLE物化視圖-Query Rewrite的一般理解之三

來源:互聯網
上載者:User

  在Query Rewrite中大家看到這個技術離不開一樣東西, 實體化視圖, 簡稱MVIEW. 這是Oracle在8i中首先推出的技術, MVIEW除了在Query Rewrite中使用外, 還在Master - Slave複製中有很重要的作用, 在這兒我們主要關心Query Rewrite相關的地方, Oracle在Query Rewrite方面越來越強了, 在Oracle 8i中基本上是Text Match的Query Rewrite, 在9i/10g中有很大的更新了, 還支援一般的Query Rewrite(指Text Match以外的), 如可以試一下最後一個SQL語句, 在8i中不能rewrite, 而在9i中卻可以:

SQL> desc mvtest8
 Name                           Null?    Type
 ------------------------------ -------- -----------------
 OWNER                                   VARCHAR2(30)
 OBJECT_NAME                             VARCHAR2(128)

SQL> create materialized view mv8_test
  2  enable query rewrite
  3  as
  4    select owner,count(*) rowcnt from mvtest8
  5    group by owner;

SQL> select count(*) from mvtest8 where owner='SYS';

   在應用MVIEW實現Query Rewrite時, 需要對MVIEW有一個基本的瞭解, 主要要理解以下兩點:

1, MVIEW的設計, 可以滿足多少SQL的Rewrite.
2, MVIEW的重新整理, MIVEW是一個中間表, 資料不一定能最新, 對於大量的資料重新整理方法也是很重要的.

   其實在這兩點之間是有些衝突的, 要實現第一點, 可能複雜的MVIEW定義有利於提高Query Rewrite後的執行效率, 但複雜的MVIEW每次重新整理都可能要抄描全部記錄, 對於MVIEW重新整理, 在有MVIEW LOG有情況下, MVIEW可以實現增量重新整理的, 一般來說要實現增量重新整理需要滿足下面這樣的條件:

1, MVIEW的SQL中不能包函傳回值不確定的函數, 如sysdate, rownum等等.
2, MVIEW的SQL中只包括匯總時,最好將COUNT(*), COUNT(欄位) 這樣的分組函數加進去.
3, MVIEW的SQL中只包括Join時.

    關於建立MVIEW和MVIEW LOG的文法在這兒就不說了, MVIEW的重新整理有三種選項, FULL: 完全重新整理; FAST: 利用MVIEW LOG進行增量重新整理; FORCE: 如果不能用FAST, 就用FULL. 對於重新整理的時機主要有兩種, ON DEMAND: 手工重新整理(Crontab, Job, Schedule等), ON COMMIT: 在Commit後進行馬上重新整理(必須是Fast, 否則你慘了).

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.