|
本帖最后由 xuexiaogang 于 2016-6-13 11:08 编辑
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
答:非常应该,甚至有很多开发最后都转DBA了。很多面向数据库的开发如果不学习数据库,那么开发什么呢?只有了解自己的开发对象才能去做。而且面向数据库的开发主要开发语言可以说都是SQL。这才是最直接和数据库打交道的语言。甚至要学习到数据库的体系结构,知道最起码锁、事务、提交、回滚、一致性读、并发机制。可以不用去处理监听,主从和灾备、集群、但是SQL的写法,正确使用索引,各种函数的使用以及算法都是需要的。有的需求甚至多多种写法,SQL已经成为了一种艺术。而高斯和庞加莱的数字故事,有人用SQL算法来实现,这就是最高的境界了。SQL大赛的冠军哪个不是开发出身?如果学习了数据库,那么很多开发工作是事半功倍的。比如如果知道了如何建立索引,如果争取使用数据库函数,甚至知道物化视图可以解决哪些问题,以及全局临时表的特定场景的使用,都是可以大大简化开发工作的。就以虚拟列一个来说,就能省下很多不必要的代码工作量。
2、在你工作中遇到什么样恶心的sql,吐槽下?
答:有的一句SQL放在QQ中都发不出去,太长了。有的AWR报告也放不下。还有的各种奇葩的编码,怎么用全表扫描怎么做,凡是应该避免的都犯错了。like的时候前后%。一个报表一天一次,一次15个小时,该语句我优化后6秒。还有的SQL半小时一次,但是单次执行都要在半小时以上。还有的SQL不知道是哪个开发做的,但是拿出来给其他开发,大家都吐了。表示怎么看?没法动。即使开发也不愿意去读,都想重写。
3、你觉得当sql 到达设到什么层次的时候,你需要让开发必须改sql?
答:执行时间超过业务要求的周期;不能承受业务并发;无法维护;低级错误;还有极其消耗CPU、内存和IO资源的必须修改,这些不改,整个数据库就没有资源做其他事情了。另外,我听一个朋友说过,他下班时候提出了一些问题,交给开发改。第二天早上发现开发改得热火朝天,他过去打招呼,“哥们,来的挺早啊?”。开发说:“什么啊,一晚上没回去!”
4、大家有没有为了sql跟开发急眼的时候,分享下
答:有过。我说这里要绑定变量。开发说什么叫绑定变量?我说like不能第一位就%,这样等于遍历所有。这时和他说数据库有40亿数据全表扫描是很长时间的。开发说这是用户需求,你别和我说。还有我说这里需要索引,开发问什么是索引?我说这是不对的,这样是不当使用数据库,需要改变。而开发说是数据库不行。
当然有素质的开发或者是虚心学习的还是会改的。还有就是看领导支持程度。有的领导懂技术的,我只要一说,所有开发全部执行,毫无怨言。
|
|