国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

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

點(diǎn)擊上方“IT那活兒”,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。。?/span>





事件背景



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





調(diào)優(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表被驅(qū)動執(zhí)行了22341次。

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

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

改寫后SQL如下,反連接使用left join進(jìn)行改寫。

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

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

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

上述子查詢因有min函數(shù),且不包含這個最小值,姑可以查詢滿足比這個最小值要大,因此可以使用分析函數(shù)進(jìn)行改寫,可以進(jìn)一步減少一次全表掃描,性能達(dá)到最優(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





分析總結(jié)



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

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



本文作者:李行行

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/129573.html

相關(guān)文章

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

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

    FuisonDesign 評論0 收藏0
  • MySQL常見問題總結(jié)

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

    wangxinarhat 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

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