<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    beauty_beast

    上善若水 厚德載物

    最近兩天在學(xué)習(xí)oracle物化視圖,學(xué)了兩天,總要輸出一些學(xué)習(xí)心得,寫的比較隨意,本來(lái)想整理,但上次整理花了一天時(shí)間,目前還要更重要的事情,故先輸出,有時(shí)間再整理。
    使用場(chǎng)景
    ????????????? 在只讀或“精讀”環(huán)境工作更好,不適用高端的聯(lián)機(jī)處理系統(tǒng),在并發(fā)事務(wù)不是很高的系統(tǒng)也可以使用
    使用前提:
    ????????????? 需要調(diào)整初始參數(shù) query_rewrite_enabled,該參數(shù)可以動(dòng)態(tài)調(diào)整,不需要重啟
    ?????????????? alter system set query_rewrite_enabled=true;
    ????????????? 相關(guān)參數(shù)還有query_rewrite_integrity 該參數(shù)值有三個(gè)enforced、trusted、stale_tolerated 調(diào)整查詢重寫級(jí)別,enforced級(jí)別最低,是默認(rèn)值??芍貙懖樵兊目赡茏钚?、(個(gè)人理解)
    簡(jiǎn)單例子
    ??????????????? create? materialized view? mview_owner_sum
    ??????????????? build immediate
    ??????????????? refresh on commit
    ??????????????? enable query rewrite
    ??????????????? as
    ??????????????? select count(*),owner from test
    ???????????????? group by owner;

    oracle在數(shù)據(jù)更新后有可能(refresh on commit)自動(dòng)重寫物化視圖,但不是能對(duì)任意的物化視圖進(jìn)行同步,對(duì)單一表或者沒(méi)有聚集的連接可以重寫。
    查詢重寫:
    ????????????? 如果查詢語(yǔ)句符合如下相關(guān)條件,oracle優(yōu)化器會(huì)從物化視圖中查詢,也就是查詢重寫。
    ????????????? 1、sql和定義視圖的sql 完全匹配,可忽略空白字符大小以及其他格式
    ????????????? 2、部分正文匹配
    ????????????? 3、查詢的數(shù)據(jù)可以從物化視圖中提取出來(lái)
    ????????????? 4、連接兼容
    ????????????? 5、分組兼容
    ????????????? 6、聚集兼容
    ??????????? (4、5、6的原則實(shí)際上就是做相關(guān)連接、分組、聚集相關(guān)數(shù)據(jù)全包含在物化視圖中才能重寫查詢)
    ????????????? 7、另外在不同的優(yōu)化策略下,是否查詢重寫是不一樣的。在默認(rèn)choose模式數(shù)據(jù)量不大的情況基本不會(huì)查詢重寫。

    根據(jù)上述原則,可通過(guò)如下的方法達(dá)到盡可能的查詢重寫,達(dá)到優(yōu)化的目的:

    1、 盡可能的增加物化視圖對(duì)應(yīng)的基本表的之間的約束關(guān)系,如主鍵、外鍵,等,
    這樣查詢是如果對(duì)應(yīng)數(shù)據(jù)可從物化視圖中提取出來(lái),系統(tǒng)會(huì)有可能改寫查詢,采用物化視圖
    2、可以通過(guò)dimension對(duì)象可以指定相關(guān)表、字段之間的關(guān)系

    應(yīng)用測(cè)試:
    正好同事有相關(guān)的統(tǒng)計(jì)性能問(wèn)題,用物化視圖嘗試了一把,查詢的速度快了二十倍,但數(shù)據(jù)更新確要16秒,(視圖是采用refresh on commit方式創(chuàng)建),不能解決該問(wèn)題(數(shù)據(jù)量不大,做完表、索引分析后查詢?cè)?.5秒左右。



    遺留問(wèn)題:
    1、創(chuàng)建了維對(duì)象,對(duì)應(yīng)的執(zhí)行計(jì)劃沒(méi)有發(fā)生改變,沒(méi)有達(dá)到創(chuàng)建維的目的
    2、如果是 refresh on?demand 方式創(chuàng)建的如何刷新數(shù)據(jù)。
    3、缺乏詳細(xì)的物化視圖創(chuàng)建語(yǔ)法說(shuō)明,只是達(dá)到基本了解物化視圖的程度


    相關(guān)學(xué)習(xí)腳本
    create materialized view mview_deptsum
    build immediate
    refresh on demand
    enable query rewrite
    as select a.deptno,a.dname,count(b.empno)
    from dept a,emp b where a.deptno=b.deptno
    group by a.deptno,a.dname

    ?

    create table sales(trans_date date,cust_id int,sales_smount number);

    insert /*+append */ into? sales
    select trunc(sysdate,'year')+mod(rownum,366) trans_date,
    mod(rownum,100) cust_id,
    abs(dbms_random.random)/100 sales_smount from all_objects;


    begin
    for i in 1..4 loop
    insert /*+append */ into? sales
    select? trans_date,
    cust_id,
    abs(dbms_random.random)/100 sales_smount from sales;
    commit;
    end loop;
    end;

    ?

    create table time_hierarchy
    (day primary key,mmyyyy,mon_yyyy,qtr_yyyy,yyyy)
    organization index
    as
    select distinct trans_date day,
    cast(to_char(trans_date,'mmyyyy')as number) mmyyyy,
    to_char(trans_date,'mon-yyyy') mon_yyyy,
    'Q'||ceil(to_char(trans_date,'mm')/3)||'FY'
    ||to_char(trans_date,'yyyy') QTR_YYYY,
    cast(to_char(trans_date,'yyyy') as number)yyyy
    from sales;
    /

    ?

    create materialized view mv_sales
    build immediate
    refresh on demand
    enable query rewrite
    as
    select sales.cust_id,sum(sales.sales_smount),time_hierarchy.mm_yyyy
    from sales,time_hierarchy
    where sales.trans_date =time_hierarchy.day
    group by sales.cust_id, time_hierarchy.mm_yyyy
    /


    select sum(sales.sales_smount),time_hierarchy.mmyyyy
    from sales,time_hierarchy
    where sales.trans_date =time_hierarchy.day
    group by? time_hierarchy.mmyyyy


    select sum(sales.sales_smount),time_hierarchy.qtr_yyyy
    from sales,time_hierarchy
    where sales.trans_date =time_hierarchy.day
    group by? time_hierarchy.qtr_yyyy

    ?

    create dimension time_hierarchy_dim
    level day is? time_hierarchy.day
    level mmyyyy? is time_hierarchy.mmyyyy
    level qtr_yyyy? is time_hierarchy.qtr_yyyy
    level yyyy????? is time_hierarchy.yyyy
    hierarchy time_rollup
    (
    day child of
    mmyyyy child of
    qtr_yyyy child of
    yyyy
    )
    attribute mmyyyy
    determines mon_yyyy;

    篇外話
    ???????????做測(cè)試導(dǎo)入的時(shí)候,對(duì)應(yīng)表空間不存在,原本想通過(guò)收回創(chuàng)建無(wú)限空間的權(quán)限,
    達(dá)到可以導(dǎo)入到用戶對(duì)應(yīng)表空間,結(jié)果不行,只好重新創(chuàng)建對(duì)應(yīng)表空間導(dǎo)入。后來(lái)忘了賦予對(duì)應(yīng)用戶權(quán)限,結(jié)果今天創(chuàng)建物化視圖報(bào)ora-01536? 超過(guò)空間限量,初以為是表空間不夠,實(shí)際是對(duì)應(yīng)的用戶沒(méi)有無(wú)限使用表空間的權(quán)限alter user username quota unlimited on tablespacename。賦予權(quán)限后可創(chuàng)建,一切正常。





    ?????????????

    Feedback

    # re: oracle 物化視圖  回復(fù)  更多評(píng)論   

    2008-04-15 17:43 by 惠靈頓
    00000000000000000

    # re: oracle 物化視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

    2009-12-23 15:35 by just
    如果物化視圖中 有 rownum 是不是不能使用 on commit 提交?

    # re: oracle 物化視圖  回復(fù)  更多評(píng)論   

    2009-12-28 14:38 by buzaixian
    @just
    使用rownum不能快速刷新

    既然不能快速刷新 用on commit也沒(méi)意思了

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 精品国产免费一区二区三区| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲欧洲日产v特级毛片| 中文字幕av免费专区| 亚洲国产中文v高清在线观看| 亚洲欧洲精品成人久久曰| 免费无码精品黄AV电影| 亚洲国产成+人+综合| 国产精品成人免费福利| 亚洲人成免费电影| 色妞WWW精品免费视频| 亚洲午夜精品一区二区麻豆| 成人性生交视频免费观看| 亚洲无mate20pro麻豆| 免费a级毛片无码a∨蜜芽试看| 99999久久久久久亚洲| 在线观看视频免费完整版| 亚洲最大成人网色香蕉| 毛片免费在线观看网址| 亚洲久热无码av中文字幕| 成人免费a级毛片无码网站入口| 亚洲娇小性色xxxx| 色吊丝最新永久免费观看网站| 亚洲精品无码av片| avtt亚洲天堂| 中国一级全黄的免费观看| 日韩亚洲一区二区三区| 一个人免费日韩不卡视频| 亚洲制服丝袜在线播放| 麻豆成人精品国产免费| 色五月五月丁香亚洲综合网| 亚洲AV之男人的天堂| 久久精品免费观看| 色在线亚洲视频www| 亚洲美日韩Av中文字幕无码久久久妻妇| 五月天婷婷精品免费视频| 久久国产亚洲高清观看| 日韩特黄特色大片免费视频| 中文在线观看国语高清免费| 亚洲国产成人久久77| 亚洲视频在线精品|