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

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

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

    七郎's JavaBlog

    草木竹石皆可為劒。至人之用人若鏡,不將不迎,應(yīng)而不藏,故能勝物而不傷。
    posts - 60, comments - 14, trackbacks - 0, articles - 0
    select count(distinct v_yjhm)
      from (select v_yjhm
              from zjjk_t_yssj_o_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
               and not exists(select 'a' from INST_TRIG_ZJJK_T_YSSJ_O b where a.v_yjtm=b.yjbh)
               --and v_yjtm not in (select yjbh from INST_TRIG_ZJJK_T_YSSJ_O)
            union
            select v_yjhm
              from zjjk_t_yssj_u_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
               and not exists(select 'a' from INST_TRIG_ZJJK_T_YSSJ_U b where a.v_yjtm=b.yjbh))
               --and v_yjtm not in (select yjbh from INST_TRIG_ZJJK_T_YSSJ_U))
     
    說明:1、zjjk_t_yssj_o_his 、zjjk_t_yssj_u_his  的d_sjrq 上都有一個(gè)索引了
             2、zjjk_t_yssj_o_his 、zjjk_t_yssj_u_his   的v_yjtm 都為 not null 字段
            3、INST_TRIG_ZJJK_T_YSSJ_O、INST_TRIG_ZJJK_T_YSSJ_U 的 yjbh 為PK
         
    優(yōu)化建議:
    1、什么是DISTINCT ?   就是分組排序后取唯一值   ,底層行為  分組排序
    2、什么是 UNION 、 UNION ALL  ?  UNION : 對(duì)多個(gè)結(jié)果集取DISTINCT ,生成一個(gè)不含重復(fù)記錄的結(jié)果集,返回給前端,UNION ALL :不對(duì)結(jié)果集進(jìn)行去重復(fù)操作     底層行為:分組排序
    3、什么是 COUNT(*)   ?   累加
    4、需要有什么樣的索引?   S_sjrq + v_yjzldm  : 理由: 假如全省的數(shù)據(jù)量在表中全部數(shù)為1000萬(wàn),查詢?cè)聰?shù)據(jù)量為200萬(wàn),1000萬(wàn)中特快占50%, 則 通過 beween 時(shí)間(d_sjrq)+ 種類( v_yjzldm ),可過濾出約100萬(wàn),這是最好的檢索方式了。
    5、兩表都要進(jìn)行一次 NOT EXISTS 運(yùn)算,如何做最優(yōu)?   NOT EXISTS 是不好做的運(yùn)算,但是我們可以合并兩次的NOT EXISTS 運(yùn)算。讓這費(fèi)資源的活只干一次。
     
    綜合以上,我們可以如下優(yōu)化這個(gè)SQL:
      1、內(nèi)部的UNION 也是去重復(fù),外部的DISTINCT 也是去重復(fù),可左右去掉一個(gè),建議內(nèi)部的改為 UNION ALL , 這里稍請(qǐng)注意一下,如果V_YJHM 有NULL的情況,可能會(huì)引起COUNT值不對(duì)實(shí)際數(shù)的情況。
      2、建一個(gè) D_SJRQ+V_YJZLDM 的復(fù)合索引
      3、將兩個(gè)子查詢先 UNION ALL 聯(lián)結(jié) , 另兩個(gè)用來做 NOT EXISTS 的表也 UNION ALL  聯(lián)結(jié)
      4、在3的基礎(chǔ)上再做 NOT EXISTS
      5、將NOT EXISTS 替換為NOT IN ,同時(shí)加提示 HASH_AJ 做半連接HASH運(yùn)算
      6、最后為外層的COUNT(DISTINCT … 獲得結(jié)果數(shù)
     
     
    SQL書寫如下:
    select count(distinct v_yjhm)
      from (select v_yjtm, v_yjhm
              from zjjk_t_yssj_o_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
            union all
            select v_yjtm, v_yjhm
              from zjjk_t_yssj_u_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
            ) a
     where a.v_yjtm not IN
           (select /*+ HASH_AJ */
             yjbh
              from (select yjbh
                      from INST_TRIG_ZJJK_T_YSSJ_O
                    union all
                    select yjbh from INST_TRIG_ZJJK_T_YSSJ_U))

    經(jīng)過上述改造,原來這個(gè)SQL的執(zhí)行時(shí)間如果為2分鐘的話,現(xiàn)在應(yīng)該20秒足夠!

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 无码日韩精品一区二区三区免费 | 精品一区二区三区免费观看| 成年人视频在线观看免费| 亚洲冬月枫中文字幕在线看 | 午夜视频免费成人| 亚洲色大成网站WWW国产| 成人啪精品视频免费网站| 亚洲午夜成人精品无码色欲| 国产成人精品免费视频大全五级| 亚洲乱码国产乱码精华| 午夜亚洲福利在线老司机| 一区二区三区免费高清视频| 自拍偷自拍亚洲精品情侣| 久久精品无码精品免费专区| 久久亚洲精精品中文字幕| 免费看美女裸露无档网站| 亚洲av永久中文无码精品| 国产乱辈通伦影片在线播放亚洲| 中文字幕无码免费久久9一区9| 日韩亚洲欧洲在线com91tv| 6080午夜一级毛片免费看| 亚洲人成7777| 亚洲国产成人a精品不卡在线| 成人性生交大片免费看中文| 亚洲日韩乱码久久久久久| 卡1卡2卡3卡4卡5免费视频 | 亚洲av色香蕉一区二区三区| 亚洲成a人片在线观看日本麻豆| 九九热久久免费视频| 91亚洲精品麻豆| 免费一级做a爰片性色毛片| 日本在线看片免费| 亚洲色偷偷偷综合网| 在线亚洲午夜理论AV大片| 精品免费久久久久久久| 美女18一级毛片免费看| 久久av无码专区亚洲av桃花岛| 夜夜嘿视频免费看| 光棍天堂免费手机观看在线观看| 亚洲一卡2卡三卡4卡无卡下载 | 亚洲综合色视频在线观看|