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

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

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

    七郎's JavaBlog

    草木竹石皆可為劒。至人之用人若鏡,不將不迎,應而不藏,故能勝物而不傷。
    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 上都有一個索引了
             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
         
    優化建議:
    1、什么是DISTINCT ?   就是分組排序后取唯一值   ,底層行為  分組排序
    2、什么是 UNION 、 UNION ALL  ?  UNION : 對多個結果集取DISTINCT ,生成一個不含重復記錄的結果集,返回給前端,UNION ALL :不對結果集進行去重復操作     底層行為:分組排序
    3、什么是 COUNT(*)   ?   累加
    4、需要有什么樣的索引?   S_sjrq + v_yjzldm  : 理由: 假如全省的數據量在表中全部數為1000萬,查詢月數據量為200萬,1000萬中特快占50%, 則 通過 beween 時間(d_sjrq)+ 種類( v_yjzldm ),可過濾出約100萬,這是最好的檢索方式了。
    5、兩表都要進行一次 NOT EXISTS 運算,如何做最優?   NOT EXISTS 是不好做的運算,但是我們可以合并兩次的NOT EXISTS 運算。讓這費資源的活只干一次。
     
    綜合以上,我們可以如下優化這個SQL:
      1、內部的UNION 也是去重復,外部的DISTINCT 也是去重復,可左右去掉一個,建議內部的改為 UNION ALL , 這里稍請注意一下,如果V_YJHM 有NULL的情況,可能會引起COUNT值不對實際數的情況。
      2、建一個 D_SJRQ+V_YJZLDM 的復合索引
      3、將兩個子查詢先 UNION ALL 聯結 , 另兩個用來做 NOT EXISTS 的表也 UNION ALL  聯結
      4、在3的基礎上再做 NOT EXISTS
      5、將NOT EXISTS 替換為NOT IN ,同時加提示 HASH_AJ 做半連接HASH運算
      6、最后為外層的COUNT(DISTINCT … 獲得結果數
     
     
    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))

    經過上述改造,原來這個SQL的執行時間如果為2分鐘的話,現在應該20秒足夠!

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲.国产.欧美一区二区三区| 13小箩利洗澡无码视频网站免费| 亚洲a级片在线观看| 久久免费公开视频| 亚洲中文字幕无码不卡电影| 亚洲精品偷拍视频免费观看| 亚洲综合无码精品一区二区三区| 亚洲欧洲免费视频| 亚洲视频在线免费观看| 久久亚洲精品成人777大小说| 精品久久亚洲中文无码| 16女性下面无遮挡免费| 91午夜精品亚洲一区二区三区| 日本一区二区三区免费高清在线| 日韩精品在线免费观看| 久久久久亚洲AV片无码下载蜜桃| 亚洲人成网站18禁止| 免费亚洲视频在线观看| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲色偷偷综合亚洲AVYP| 亚洲视频免费播放| 国产精品亚洲色图| 亚洲午夜未满十八勿入网站2| 亚洲综合激情五月丁香六月| 噜噜嘿在线视频免费观看| 日本高清不卡中文字幕免费| 亚洲Av永久无码精品三区在线| 偷自拍亚洲视频在线观看| 亚洲人成伊人成综合网久久久 | 18女人毛片水真多免费| 色播亚洲视频在线观看| 午夜免费福利在线观看| 成年免费a级毛片免费看无码| 免费人成在线观看网站品爱网日本 | 国产精品亚洲а∨天堂2021| 免费无码又爽又刺激网站| 亚洲av日韩av无码av| 亚洲综合最新无码专区| 在线永久免费的视频草莓| 一级毛片成人免费看a| 97亚洲熟妇自偷自拍另类图片|