简介:从业十年,始终专注于 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,代码如下: