POST TIME:2018-12-03 17:34
簡介:從業十年,始終專注于 SQL。十年一劍,十年磨礪。3 年通信行業,寫就近 3 萬條 SQL;5 年制造行業,遨游在 ETL 的浪潮;2 年性能優化,厚積薄發自成一家。
注:《SQL性能優化與批判》是黃浩老師的系列新作,他將從過往在項目技術支持中碰到的諸多案例入手,細化到每一條問題 SQL 的內在病因,反思每一個案例的背后深思,,抽絲剝繭,層層深入。
今天跟大家分享的是 WM_CONCAT 優化,這是一次憑借技術+經驗+運氣三重加成才得以解決的案例,are you ready?
一、案例
初來乍到,如臨深淵
公元 2015 年 7 月 20 日,天氣還是一如既往的炙熱,徐徐海風也吹不散身上的熱量。在經過近一個小時的班車加徒步,我正式開啟了在 H 公司 I 項目技術支持的第一天。
因為信息安適的緣故,第一次進入項目現場的外協人員需要管理接待電子流。因為是非研發區域,倒也快捷,經過兩重關卡后,順利進入到項目現場。
媽呀,一個足球場般大小的辦公場地,一排排的辦公桌和電腦井然有序,但桌面上的辦公用品卻凌亂狼藉,而座位跟座位之間沒有任何的遮擋。
當時已經九點多,基本上座無虛席,雖然開著空調,仍然能感覺到一股由電腦散發出來的摻雜著鐵銹及灰塵味的熱氣,以及由此帶來的壓抑感。
在與現場同事簡短的寒暄后,我便立馬投入到工作——當然是交接工作。與同事的溝通中,我獲取了如下信息:
這位同事來這個項目不足兩周。
離職的原因是適應不了外包的工作方式。
項目組性能優化工作開展很困難,項目組在這方面的投入不夠,重視度也不夠。
綜合起來就是一個字:坑,并且是巨坑。原本擔心我主不雅觀上的能力問題會影響到工作,沒想到客不雅觀環境也是如此糟糕,我的表情跌倒了冰點。
明天是這位同事在項目組的 last day,所以交接工作必需在今天內完成。好在同事進項目不久,還沒有接觸到太多的工作內容,手頭上就一個在優化的 SQL。
因為這個 SQL 的優化已經持續了幾天時間,所以到目前顯得有些緊迫:該 SQL 的優化被擺設在周六上線,因此必需要在周三前給出優化方案。
離周三只有不到 2 天的時間了,而目前的優化進度還停留在問題定位階段,還不確定問題處在哪里?換句話說,不是工作交接,而是從零開始。
我在同事的交接文檔中找到了問題 SQL,代碼如下: