追寻完美:数据库SQL优化极致 之 关心隐藏的部分

张中靖 云和恩墨技术专家,软件研发总监

我们先来听一个【老木匠和小木匠的故事】

同样做柜子,老木匠做的是两面光,柜子内外摸起来一样光滑、不扎手;而小木匠做的,大多是外面光滑,里面不能细看。

乔布斯可以算是一位老木匠了,他一生中追求的完美主义,淋漓尽致地表现在了苹果的一系列产品中。《史蒂夫·乔布斯传》有这样的描述:

乔布斯从父亲身上学到,充满激情的工艺就是要确保即使是隐藏的部分也被做得很漂亮。这种理念最极端也是最有说服力的例子之一,就是乔布斯会仔细检查电路板,电路板上是芯片和其他部件,深藏于麦金塔的内部,没有哪个用户会看到它,但乔布斯还是会从美学角度对它进行评判。“哪个部分做得很漂亮,”他说,“但是,看看这些存储芯片。真难看。这些线靠的太近了。”

一名新手工程师打断他说这有什么关系,“只要机器能运行起来就行,没人会去看电路板的”。

乔布斯的反应和往常一样:“我想要它尽可能好看一点,就算他是在机箱里面的。优秀木匠不会用劣质模板去做柜子的背板,即使没人会看到。”几年之后,在麦金塔电脑上市后的一次访谈中,乔布斯再一次提到了当年父亲对他的教导:“如果你是个木匠,你要做一个漂亮的衣柜,你不会用胶合板做背板,虽然这一块是靠着墙的,没人会看见。你自己知道它就在那儿,所以你会用一块漂亮的木头去做背板。如果你晚上想睡得安稳的话,就要保证外观和质量都足够好。”

乔布斯的“关心隐藏部分”理念让他把细节做到了极致,这是苹果产品能够做到今天成就的一个重要因素。同样,这个道理也适用于我们做SQL优化的时候。一些技术人员谈论到用profile优化SQL,效果是如何如何的好。做Oracle优化时,不少人习惯用Hint、Outline、Profile等固定执行计划来优化SQL,效果几乎是立杆见影。殊不知这是将SQL性能与SQL文本建立了强关联,并没有根本解决问题。一旦SQL写法发生变化(或者未使用hint的SQL出现),优化手段失效的可能性很大,性能问题将再次出现。

这种优化方式的问题在于仅限于解决现场问题(类似于急诊),而停止去思考SQL选择较差执行计划的原因。Oracle一直不停的改进CBO算法,就是为了让SQL书写方式跟性能解耦,让开发人员尽可能只关注实现业务逻辑。当Oracle为SQL选择了性能较差的执行计划,在使用profile甚至hint固定临时解决问题后,DBA还要思考下为啥选择了差的执行计划?差的执行计划和较优的执行计划有哪些差别?这些差别是什么导致的?能否修复?只有理解了执行计划的产生原理才能从根本上解决问题,也就是老木匠和小木匠的差别。

本文引用内容来源:《史蒂夫·乔布斯传》第十二章:设计 。本文题图来自网络。

我们一直在关注SQL的性能,并为此在研发SQL性能诊断分析产品,如果你是一个完美主义者,并对此深藏爱好,请给我们发送简历。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序人生

写本Racket入门书

从来没有一件事让我如此着迷。自上周五那个无聊的晚上打开 racket-lang.org 的主页,想看看大牛们口中的Racket究竟是什么样子后,这猎奇的心态就变...

3878
来自专栏大宽宽的碎碎念

如何积累知识和技能答网友-如何积累知识和技能一个故事凡事都有目标形象化关联不断的学,灵动的用结论

33513
来自专栏程序员互动联盟

这个功能下班之前必须做好

1. 老板:“这个功能下班之前必须做好!”程序猿:“好的。” 第二天早上老板:“这个功能怎么还没做好?”程序猿:“我还没下班呢。” 2. 世界上最遥远的距离不是...

3246
来自专栏BestSDK

勾引程序员的11个方法,第4招百试不爽

一、写纯文本格式的邮件 ? 程序员通常不喜欢你那些花里胡哨的邮件——比如粉红的标题、粗体的HTML格式的邮件内容、并且还内嵌图片。他们喜欢的是简洁命令的纯文字表...

30210
来自专栏华章科技

开除了没情商的“技术大神”后,整个团队都好起来了

“我创造的东西你们这辈子也别想弄明白,我就是爱因斯坦,你们就是那没进化完的猴子!”

673
来自专栏程序人生

2018年3月过去了,我收获到什么?

最大的收获自然是我和 Joe 老爷子访谈,它是无价的。我前些日子已经放了篇文章:Joe Armstrong 面对面。没看过的同学可以点进去看看。我希望我六十岁时...

1030
来自专栏一个会写诗的程序员的博客

Eric S. Raymond:如何成为一名黑客如何成为一名黑客How To Become A Hacker

http://www.0x08.org/docs/hacker-howto.html#hacker-howto

792
来自专栏腾讯移动品质中心TMQ的专栏

管家12大版本质量把控秘籍

六脉神剑秘籍 说起一年一度的管家大版本,那可是一个浩大的工程,管家各大中心都会参与,变更代码线多,版本稳定期久,对各个中心正常的单周迭代需求合入影响大,这质量把...

2056
来自专栏养码场

我是如何走上JVM这条贼船的?

寒泉子:阿里jvm专家,主要围绕jvm发表系列文章,现有个人微信公众号:“你假笨”(ID:lovestblog)

801
来自专栏AI研习社

2017 年关于 Python 案例的 Top45 文章

本文为雷锋字幕组编译的年度盘点系列,原标题Python Top 45 Articles for the Past Year (v.2018),作者Mybrid...

3846

扫描关注云+社区