数据库 频道

SQL优化思想⓵--不优化或许是最好的优化!

  引言

  熟悉我的朋友知道我擅长SQL优化,2017年出版过近80万字的技术书籍——《收获,不止SQL优化》,十余次印刷,反响热烈,在此,感谢支持我的读者。接下来,我将站在SQL优化思想的角度,给大家做一个系列分享。

  首先就是要有批判性思维,我将告诉大家:不优化或许是最好的优化!故事从L老师的一次优化经历说起,希望给大家带来新的启发。

  0 哈哈,其实我几乎什么都没做

  Q:L老师,自从您为XXX平台做了SQL优化后,运行非常顺畅,您是做了大量改写吗?

  L:我并没做任何SQL改写。

  M:没有改写?那是通过索引优化吗?

  L:我也没有新增任何索引。

  W:老师,难道您调整了表结构,比如建分区、分片键、或者调整字段类型?

  L:还是没有,所有表结构我都未做任何改动。

  X:那一定是调整了某些神奇的参数吧?

  L:哈哈,其实我几乎什么都没做。

  众人面面相觑。

  L:各位,我知道你们很惊讶,其实,优化SQL和很多其他事情是相通的,比如企业会定期评估员工绩效,对表现不佳的员工进行有针对性的指导,帮他们优化自身能力,以更好地胜任工作。这和SQL优化就有些类似。

  Q:一个针对SQL,一个针对员工,都是优化。有意思,L老师,您给我们展开说说吧。

  1 莫急,探究SQL存在的必要性

  L:嗯。小A是一个绩效不佳的员工,原因是一直没法拓展新客户。老板老K却觉得他能力不足,不断督促他学习提升。可是,在与小A接触后,我发现他已经非常努力,把大部分业余时间都投入到提升业务技能上,而且他的能力并不差。那么,为什么他无法胜任工作呢?

  W:会不会是工作本身太难,难以完成?

  L:不是工作难,而是小A所做的方向已经被市场淘汰了。我当即对老K说,这事换谁做都一样,即便您老K来做,也不会好。其实该提升的不是小A,而是老K您啊。

  Q:哦,原来如此。

  L:回到XXX平台的SQL优化案例,该平台的A模块有一类SQL大家束手无策,改写多次仍无法优化。我通过分析这些SQL的日期条件逻辑,判断出它们大概率可以直接下线。经确认,这些SQL确实多余,于是果断删除,问题解决!

  W:厉害!从SQL的必要性角度思考问题,确实是一种批判性思维,受益匪浅。

  L:是的。回到小A的故事,之后老K舍弃了这个业务方向后,小A转做其他工作,其表现大幅提升,成为公司的优秀员工。

  X:哈哈,扬眉吐气!

  2 莫慌,观察SQL运行的全局性

  L:小B也是低绩效,其原因是工作效率太低。但我见到小B时,觉得他思路清晰,手脚利索,不像不思进取的员工。然而,深入了解后,我才明白原因。

  Q:为什么?

  L:小B所在的部门办公地点偏僻,办公设备简陋,这导致每个人的工作效率都因此降低,只是小B太年轻没经验,显得更糟一些罢了。这次的问题依然在老K身上。

  W:原来小B是被冤枉的。

  L:回到XXX平台SQL优化案例,该平台的B模块有一类SQL,无论怎么优化都快不了。就在大家一筹莫展之时,我发现这些SQL所在的主机资源极其繁忙,系统的压力巨大,任何SQL在这种环境下都难以提升,进一步调查后,了解到主机上有很多进程可以迁移到其他主机,于是火速迁移,结果这些SQL运行速度飞升。

  Q:我明白了,解决问题还是要先看全局啊。

  L:是的。回到小B的故事,之后老K改善了小B部门的环境,小B工作效率迅速提升,很快便成为了公司的核心骨干。

  X:哈哈,沉冤昭雪!

  3 莫忘,分析SQL需求的合理性

  L:最后说说小C,他低绩效的原因是工作时常出错。经过交流,我发现小C根本不是一个粗心大意的人。后来才明白了真相。

  Q:真相是什么?

  L:小C每天要与近百个客户对接,任务繁重,难免会忙中出错。

  W:可怜的小C。

  L:回到XXX平台的SQL优化案例,该平台的C模块有一批SQL难以优化,且每天执行次数达千万次,消耗大量主机资源。调查后发现这是每分钟一次的采集工作。经过深入分析业务,确定可将其调整为每天采集一次,于是SQL执行次数立降千倍,系统负载大幅减少,性能显著提升。

  Q:出乎意料啊!居然想到质疑需求背后的合理性,看来没有什么是不可以改变的。

  L:是的。回到小C故事,之后老K通过协商,让小C从对接每个客户变成只对接客户的总接口人。很快,小C每天只需对接十多人,时间得到了极大节省,工作质量也大幅提升了,不久就被提拔为部门经理。

  X:哈哈,逆袭人生!

  结语

  “不优化或许是最好的优化!”—— 强调以批判性的思维从源头解决问题。看似什么都没做,实则通过必要性、全局性、合理性的分析,早已将SQL优化的效果拉满。

  万事相通,SQL优化与员工优化在本质上并无差异。正如那些SQL的问题不在SQL本身一样,小A、小B、小C他们的低绩效原因,也不在于他们本身。

  本文提到的平台优化与员工优化皆为真人真事,希望能给大家带来启发。下一集开始,我将带领大家基于SQL优化的思想,一步一步推导出完善的SQL优化方法论,敬请期待!

  未完待续...

0
相关文章