三行SQL代码中隐藏的数据库书单

  • 2020 年 3 月 10 日
  • 笔记

我们本该在任何地方,都学到我们应该学到的东西!

写这段文字,是因为前不久发生的一个留言:

我不知道什么样的群,算是有意思。但你要进了群,一言不发,那肯定是找不到有意思的事情。

再举个例子,我的历任老板都对我说过相同的话:

能不能帮我多培养几个像你一样精通数据库的年轻人?

第一次听到这番话时,我相当激动,热泪盈眶。开心之意溢于言表,当然是十分乐意。但几次之后,发现精通数据库的高手,并不是靠师傅培养就能出的来。

举个例子:下面这段不到 3 行的 SQL 代码,跑了 30 秒都没有出来结果,你怎么解决?

image

很多人第一反应是数据库压力大,慢了,结果死等,死等几次后,去百度。结果百度无果,就会问一问组里资深的人。但也有部分筒子,懒得百度,冲到高工那里就死皮赖脸让人家帮忙解决问题。之后不了了之。还有的同学(极个别)会请教高工,是哪里看到的技巧,然后去谷歌百度一下。

我不知道你会怎么做,但就我开号这么长时间来,真遇到问题,会在我号留言,说到点上的,10个人不到。更多,就是第一朋友的留言那样,“我没遇到过,我没从你群里学到技巧,你真没意思”

现实中,也没好到哪里去!碰到这个问题,还是直接找我要答案,并不想知道,答案从哪里来。

在这段不到 3 行的 SQL 中,至少能反应出一个人看过哪些书,是真正看进去,弄明白的那种看书。

基础部分

如果不知道 SQL Server 还有 INTERSECT 命令,那只能说明,基础的语法书,都没有完整的看过了。

比如:《Inside SQL Server T-SQL Querying》、《Inside SQL Server T-SQL Programming》

当看过上边两本书之后,应该懂得如何使用 Execution Plan 执行计划来分析,究竟哪些步骤出了问题,消除基本的性能障碍。

image

上面两本书,至少给了你线索,从这些带蓝框的算法里面找瓶颈。

进阶书籍

当我在语句后,加入一段命令,数据就秒出,我不知道这个时间节省了多少倍,超过 30 秒的 SQL 是根本不允许存在的。因此即使这段经我手优化的 SQL 执行了 1 秒,也比原先的 SQL 快了 30 倍。

image

你看,就 319 行数据,用了 30 秒都没出的来。

那很多朋友也许都要说:

哦,还有 OPTION(HASH JOIN)这回事啊,怎么玩的啊?

嗯,怎么玩,我好像没有义务告诉你啊。再说,我给出这么段 SQL ,难道怎么玩不是该你去补课的地方嘛?

所以,每每老板对我语重心长说,要多培养几个高手,我现在也只能苦笑。高手的培养,真不是一朝一夕,还得看资质。

在晋级书单中,一定会有数据库性能调优相关的书。我推荐《Inside SQL Server Performance Tunning》.当然凡是带有 SQL Performance Tuning的书,都不要放过,至少看看目录。我曾经买了不少于 5 本带有Performance Tuning 的书。有 Oracle, MySQL,也有 Spark SQL. 更细致一些,还会有单独对索引进行介绍的,比如《数据库索引设计与优化》。再说一遍,在知识面前,钱算个P!

看完这些书,你可以欺骗数据库优化引擎,想让它做什么,都行。酷不酷?

image

你看这里,Hash Match 算法,你懂了么?

–完–