成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SQL中帶有Not in改寫調優(yōu)案例

IT那活兒 / 1773人閱讀
SQL中帶有Not in改寫調優(yōu)案例

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了?。?!





事件背景



某駐場客戶上線oa系統(tǒng)上線后系統(tǒng)負載很高,經客戶溝通對top sql進行調優(yōu)處理,大部分SQL索引創(chuàng)建不合理,少部分需要進行改寫調優(yōu),摘取其中一個比較典型sql進行描述。





調優(yōu)過程



原SQL:

select count(*)

  from xxxx.xxxxx_table_name

 WHERE ID not IN (SELECT MIN(ID)

                    from xxxx.xxxxx_table_name

                   group by resourceid,

                            resourcetype,

                            infoid,

                            menutype,

                            sharetype,

                            sharevalue,

                            seclevel,

                            rolelevel,

                            customid,

                            jobtitlelevel,

                            jobtitlesharevalue)
;



  COUNT(*)

----------

   10291

執(zhí)行計劃如下, xxxx.xxxxx_table_name表被驅動執(zhí)行了22341次。

從上述執(zhí)行計劃可以了解到的信息是id 3,xxxx.xxxxx_table_name表全表掃描返回22341行數據,執(zhí)行時間0.01s,對子查詢進行匹配,子查詢被掃描了22341次。該步驟為SQL執(zhí)行主要消耗點。而not in可以被等價改寫成left join。

改寫調優(yōu)方案一:

改寫后SQL如下,反連接使用left join進行改寫。

這里的改寫思路是兩個表直接關聯(lián)查詢,從而避免filter過濾導致子查詢被掃描22341次,而是僅僅掃描兩次表就返回想要的結果。

select count(*)

  from xxxx.xxxxx_table_name a,

       (SELECT MIN(ID) id

          from xxxx.xxxxx_table_name

         group by resourceid,

                  resourcetype,

                  infoid,

                  menutype,

                  sharetype,

                  sharevalue,

                  seclevel,

                  rolelevel,

                  customid,

                  jobtitlelevel,

                  jobtitlesharevalue) b

 where a.id
= b.id(+)

   and b.id is null;



COUNT(*)

----------

 10291

改寫調優(yōu)方案二:

上述子查詢因有min函數,且不包含這個最小值,姑可以查詢滿足比這個最小值要大,因此可以使用分析函數進行改寫,可以進一步減少一次全表掃描,性能達到最優(yōu),改寫后的SQL以及執(zhí)行計劃如下:

select count(*)

from (select row_number() over(partition by resourceid, resourcetype, infoid, menutype, sharetype, sharevalue, seclevel, rolelevel, customid, jobtitlelevel, jobtitlesharevalue order by id asc) rn

from xxxx.xxxxx_table_name)

where rn > 1
;



  COUNT(*)

----------

   10291





分析總結



SQL執(zhí)行效率差,影響正常生產業(yè)務是數據庫運維人員經常遇到的場景,SQL的寫法很重要,很多系統(tǒng)隨著數據量的增長越來越慢,大部分跟SQL寫法不佳有關,如果我們運維人員不能識別這些低效寫法,就會背上運維水平差的鍋,影響運維公司形象。

在我們調優(yōu)過程中,換個思路,可能會得到不一樣的結果,通過以上兩種調優(yōu)思路希望能幫助到大家。



本文作者:李行行

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/129573.html

相關文章

  • 記一次 MySQL 的慢查優(yōu)化

    摘要:最近遇見一個的慢查問題,于是排查了下,這里把相關的過程做個總結。而且,我檢查了子查詢的表的索引,中用到的查詢條件都已經增加了索引。還好我們的子查詢加了必要的索引,不然結果會更加慘不忍睹。這個結果真是太坑爹,而且十分違反直覺。 最近遇見一個 MySQL 的慢查問題,于是排查了下,這里把相關的過程做個總結。 定位原因 我首先查看了 MySQL 的慢查詢日志,發(fā)現(xiàn)有這樣一條 query 耗時...

    FuisonDesign 評論0 收藏0
  • MySQL常見問題總結

    摘要:實現(xiàn)事務的原子性,要支持回滾操作,在某個操作失敗后,回滾到事務執(zhí)行之前的狀態(tài)。一致性事務使得系統(tǒng)從一個一致的狀態(tài)轉換到另一個一致狀態(tài)。 本文作者 TomorrowWu,原創(chuàng)文章,轉載注明出處,博客地址 https://segmentfault.com/u/to... 第一時間看后續(xù)精彩文章。覺得好的話,順手分享到朋友圈吧,感謝支持。 筆者最近在準備面試,覺得學習最好的方式就是把知道的東...

    wangxinarhat 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<