亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

Oracle數據庫中物化視圖的原理剖析

瀏覽:61日期:2023-11-22 13:10:16
物化視圖 (MV)在一個段中存儲查詢結果,并且能夠在提交查詢時將結果返回給用戶,從而不再需要重新執行查詢 — 在查詢要執行幾次時(這在數據倉庫環境中非經常見),這是一個很大的好處。物化視圖可以利用一個快速刷新機制從基礎表中全部或增量刷新。 假定您已經定義了一個物化視圖,如下: create materialized view mv_hotel_resvrefresh fastenable query rewriteasselect distinct city, resv_id, cust_namefrom hotels h, reservations r where r.hotel_id = h.hotel_id'; 您如何才能知道已經為這個物化視圖創建了其正常工作所必需的所有對象?在 Oracle 數據庫 10g 之前,這是用 DBMS_MVIEW 程序包中的 EXPLAIN_MVIEW 和 EXPLAIN_REWRITE 過程來判定的。這些過程(在 10g 中仍然提供)非常簡要地說明一種特定的功能 — 如快速刷新功能或查詢重寫功能 — 可能用于上述的物化視圖,但不提供如何實現這些功能的建議。相反,需要對每一個物化視圖的結構進行目視檢查,這是非常不實際的。 在 10g 中,新的 DBMS_ADVISOR 程序包中的一個名為 TUNE_MVIEW 的過程使得這項工作變得非常輕易:您利用 IN 參數來調用程序包,這構造了物化視圖創建腳本的全部內容。該過程創建一個顧問程序任務 (Advisor Task),它擁有一個特定的名稱,僅利用 OUT 參數就能夠把這個名稱傳回給您。 下面是一個例子。因為第一個參數是一個 OUT 參數,所以您需要在 SQL*Plus 中定義一個變量來保存它。 SQL> -- 首先定義一個變量來保存 OUT 參數SQL> var adv_name varchar2(20)SQL> begin2 dbms_advisor.tune_mview 3 (4:adv_name,5'create materialized view mv_hotel_resv refresh fast enable query rewrite asselect distinct city, resv_id, cust_name from hotels h, reservations r where r.hotel_id = h.hotel_id');6* end; 現在您可以在該變量中找出顧問程序的名稱。 SQL> print adv_nameADV_NAME-----------------------TASK_117 接下來,通過查詢一個新的 DBA_TUNE_MVIEW 來獲取由這個顧問程序提供的建議。務必在運行該命令之前執行 SET LONG 999999,因為該視圖中的列語句是一個 CLOB,默認情況下只顯示 80 個字符。 select script_type, statement from  dba_tune_mview where task_name = 'TASK_117' order by script_type, action_id; 下面是輸出: SCRIPT_TYPESTATEMENT-------------- -----------------------------------------------------------IMPLEMENTATION CREATE MATERIALIZED VIEW LOG ON 'ARUP'.'HOTELS' WITH ROWID,SEQUENCE ('HOTEL_ID','CITY') INCLUDING NEW VALUESIMPLEMENTATION ALTER MATERIALIZED VIEW LOG FORCE ON 'ARUP'.'HOTELS' ADDROWID, SEQUENCE ('HOTEL_ID','CITY') INCLUDING NEW VALUESIMPLEMENTATION CREATE MATERIALIZED VIEW LOG ON 'ARUP'.'RESERVATIONS' WITHROWID, SEQUENCE ('RESV_ID','HOTEL_ID','CUST_NAME')INCLUDING NEW VALUESIMPLEMENTATION ALTER MATERIALIZED VIEW LOG FORCE ON 'ARUP'.'RESERVATIONS'ADD ROWID, SEQUENCE ('RESV_ID','HOTEL_ID','CUST_NAME')INCLUDING NEW VALUESIMPLEMENTATION CREATE MATERIALIZED VIEW ARUP.MV_HOTEL_RESV  REFRESH FASTWITH ROWID ENABLE QUERY REWRITE AS SELECTARUP.RESERVATIONS.CUST_NAME C1, ARUP.RESERVATIONS.RESV_IDC2, ARUP.HOTELS.CITY C3, COUNT(*) M1 FROM ARUP.RESERVATIONS,ARUP.HOTELS WHERE ARUP.HOTELS.HOTEL_ID =ARUP.RESERVATIONS.HOTEL_ID GROUP BYARUP.RESERVATIONS.CUST_NAME, ARUP.RESERVATIONS.RESV_ID,ARUP.HOTELS.CITYUNDO  DROP MATERIALIZED VIEW ARUP.MV_HOTEL_RESV SCRIPT_TYPE 列顯示建議的性質。大多數行將要執行,因此名稱為 IMPLEMENTATION。假如接受,則需按照由 ACTION_ID 列指出的特定順序執行建議的操作。 假如您仔細查看這些自動生成的建議,那么您將注重到它們與您自己通過目視分析生成的建議是類似的。這些建議合乎邏輯;快速刷新的存在需要在擁有適當子句(如那些包含新值的子句)的基礎表上有一個 MATERIALIZED VIEW LOG。STATEMENT 列甚至提供了實施這些建議的確切 SQL 語句。 在實施的最后一個步驟中,顧問程序建議改變創建物化視圖的方式。注重我們的例子中的不同之處:將一個 count(*) 添加到了物化視圖中。因為我們將這個物化視圖定義為可快速刷新的,所以必須有 count(*),以便顧問程序糾正遺漏。 TUNE_MVIEW 過程不僅在建議方面超越了在 EXPLAIN_MVIEW 和 EXPLAIN_REWRITE 中提供的功能,還為創建相同的物化視圖指出了更輕易和更高效的途徑。有時,顧問程序可以實際推薦多個物化視圖,以使查詢更加高效。 您可能會問,假如任何一個經驗豐富的 DBA 都能夠找出 MV 創建腳本中缺了什么,然后自己糾正它,那這還有什么用?嗯,顧問程序正是用來完成這項工作的:它是一位經驗豐富、高度自覺的自動數據庫治理員,它可以生成能與人的建議相媲美的建議,但有一個非常重要的不同之處:它免費工作,并且不會要求休假或加薪。這一好處使高級 DBA 解放出來,將日常的工作交給較低級的 DBA,從而答應他們將其專業技能應用到更具有戰略意義的目標上。 您還可以將顧問程序的名稱作為值傳遞給 TUNE_MVIEW 過程中的參數,這將使用該名稱而非系統生成的名稱生成一個的顧問程序。
標簽: Oracle 數據庫
主站蜘蛛池模板: 99九九国产精品免费视频 | 澳门一级特黄真人毛片 | 亚洲欧美日韩国产专区一区 | 久久精品99精品免费观看 | 91精品宅男在线观看 | 久草手机在线观看视频 | 久久九九视频 | 久久久久久久国产精品影院 | 99爱在线精品视频免费观看9 | 国产一级片免费观看 | 国产精选91热在线观看 | 亚洲日本高清影院毛片 | 日本国产免费一区不卡在线 | 不卡精品国产_亚洲人成在线 | 欧美精品另类hdvideo | 国产福利精品在线观看 | 男人天堂手机在线 | 美女在线看永久免费网址 | 成年人免费软件 | 久久99亚洲网美利坚合众国 | 亚洲精品二区中文字幕 | 一本一本久久a久久精品综合麻豆 | 久久99久久精品久久久久久 | 久久一级片 | a级片观看 | 国产成人mv在线观看入口视频 | 欧美一级高清片免费一级 | 欧美精品专区免费观看 | 午夜怡红院 | 台湾香港澳门三级在线 | 欧美日韩在线视频一区 | 在线a人片免费观看国产 | 成人免费小视频 | 欧美精品午夜久久久伊人 | 欧美另类视频videosbest18 | 精品一区二区三区视频在线观看免 | 草草在线观看视频 | 久久成人免费观看全部免费 | 一本色道久久综合亚洲精品高清 | 欧美日韩在线视频观看 | 精品欧美一区视频在线观看 |