对不起,你以为的SQL进阶,只是别人眼中的入门

2020-06-02 17:01:32 浏览数 (1)

图 | 榖依米

我们的 SQL 与大数据微信群,有读者提出这么个问题,数据库高级开发工程师,要掌握哪些技能

这个话题非常具有启发性。要回答好这样一个话题,就要保证自己的数据库知识全面化,体系化,系统化,还要紧贴一线实战,以免和理论脱轨太远。最好的方法是,与玩得好的业内高手交流。

我们眼里的高级,可能只是高手眼里的入门。不要只听一家之言,多看多思考,多求证,会获得更多启发。

所以,我尝试整理一些话题,掌握这些知识,可能你已经踩进数据库行业高级门槛了。但重要的事情,再说一遍,我们眼里的高级,可能是另外一些人眼里的入门。

今天先说开发。

很多朋友接触数据库,肯定不是一开始就做DBA,哪个老板愿意给新人DBA的岗位,那无异于在云霄走钢丝。数据是企业命脉这种老套的话,我也不想啰嗦,反正道理都懂,保护数据就是在保护企业资产与市值。如果不明白,参考微盟程序员删库跑路事件。所以 DBA 的高级方向,我放在下篇文章。

作为开发,CRUD 是基本功,但很多朋友,写个行列转换,都要查下手册的,要我说你高级,还真不敢。再一个,如果没有数据库提供的函数,你能手写一个动态的行列转换SQL吗?这两题,算是第一道关。

有些低端的培训机构,找我推广告,我一看,他们把这一道关的 SQL 知识点,写在他们的培训手册或课程大纲里,真是要笑掉大牙。美其名曰,SQL 进阶技能。然后标价1999,元,附上“今天活动,前 100 位 1 折,只要199元”的跳楼价!

实际上,靠这些烂大街,随便在微信读书翻翻就懂的技巧,能找到“走向人生巅峰”的工作,才怪呢!我是不信的。我也不接这样的广告,虽然广告费更可观!

第二道关,尽可能多的知道数据库软件自带的一些函数。有朋友说,不想背那么多函数,到用的时候,自己写一个。

亲,请对比下你自己写的函数与系统函数的性能,再来这么横,好嘛。自己有多懒,代码有多烂,心里没个数么。都没用过系统函数,凭自己那点水平造轮子,不是在给自己挖坑,给团队挖坑,给公司挖坑吗?RowNumber,Rank这类分析函数,系统都做了优化的,你还能写得过微软,Oracle,或者TeraData这帮人?

第三道关,你能不能开发一套函数给数据库使用?如果系统提供的函数,功能完不成,性能又不好,而项目又急需,怎么办?

举个SQL Server的例子,一直以来,T-SQL对正则是支持不到位的,很多时候,LIKE又不能很好的解决IP地址,网址等解析操作。但c#是完美支持正则的,你会不会想到用到c#去封装一个函数,注册到SQL Server中,供团队使用?

不仅 SQL Server的CLR函数能做这样的事,Oracle的Java包,Hive的定义程序包,等等,都能支持程序员写扩展函数。

第四道关,开发这块的进阶,最终会强烈地反应在性能调优上。针对别人调优到5秒的查询,你会不会继续优化,使其突破1秒或者500ms?

如果从技术上无法调优了,是不是可以从业务角度,数据模型角度去尝试?

如果突破数据库领域,是不是可以从应用架构入手,比如增加缓存,读写分离,分布式数据库?能不能把QPS/TPS提高一个数量级?

继续这么深入研究下去,在数据库这个行业,你肯定不愁工作的事儿。

仅说这些理论的话,我都觉得空洞了。那就说点实战的题:

kNN 算法的 SQL 实现

传说中 6 个月都未必能全解开的 3 道 SQL 题,来挑战下?

以上都是有难度的实战题,自己写写看,就知道进阶,是怎么回事了。

Talk Is Cheap, Show me your Code!

0 人点赞