今天帮同事调程序,优化了一个SQL语句。
直接执行这个SQL语句,12个小时出不来结果。
分析了一下子,这个sql语句是三个表自然连接。然而最大的一张表,有32万条记录,第二张表有三千条,第三张有32条。于是自然连接的结果的数量级,至少在10^9以上,难怪12个小时没有结果。经过优化以后,不到1秒就有结果了。
其实这个问题,只要对关系代数有最基本的了解,就可以避免了。可是写这个语句的同事,显然没有了解过关系代数。
而最让我郁闷的,是这个语句是经过我们老大审核的。我们老大很喜欢用SQL语句,我曾经见过他在SQL语句里面写if...else...结构。就是这样一个人,这样的语句能通过他的审核实在让我有点惊讶。
我觉得不少人,包括我们老大都有这样的误区:写程序只要对编程语言有足够的了解,有清晰的逻辑思维就差不多了。
可是,语言之所以存在,是因为背后的思想,而学习基础知识,就是为了了解这些思想。只有了解了语言背后的思想,才能够从本质上了解语言所代表的那种计算机的运作机制,进而才能够找到最优解。
联想到前些日子,袁老大对金老师的棒喝,我深以为然。不了解基础知识,固然凭借勤奋可以有不错的收入。但是基础知识的匮乏,注定了只能跟随别人的指挥棒起舞。只有拥有了足够多的基础知识,才能够真正让自己的思想,自由的起舞。
直接执行这个SQL语句,12个小时出不来结果。
分析了一下子,这个sql语句是三个表自然连接。然而最大的一张表,有32万条记录,第二张表有三千条,第三张有32条。于是自然连接的结果的数量级,至少在10^9以上,难怪12个小时没有结果。经过优化以后,不到1秒就有结果了。
其实这个问题,只要对关系代数有最基本的了解,就可以避免了。可是写这个语句的同事,显然没有了解过关系代数。
而最让我郁闷的,是这个语句是经过我们老大审核的。我们老大很喜欢用SQL语句,我曾经见过他在SQL语句里面写if...else...结构。就是这样一个人,这样的语句能通过他的审核实在让我有点惊讶。
我觉得不少人,包括我们老大都有这样的误区:写程序只要对编程语言有足够的了解,有清晰的逻辑思维就差不多了。
可是,语言之所以存在,是因为背后的思想,而学习基础知识,就是为了了解这些思想。只有了解了语言背后的思想,才能够从本质上了解语言所代表的那种计算机的运作机制,进而才能够找到最优解。
联想到前些日子,袁老大对金老师的棒喝,我深以为然。不了解基础知识,固然凭借勤奋可以有不错的收入。但是基础知识的匮乏,注定了只能跟随别人的指挥棒起舞。只有拥有了足够多的基础知识,才能够真正让自己的思想,自由的起舞。