|
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
现在我们开发的软件大多是应用软件,应用软件是肯定要用到数据的,数据的保存就需要数据库了,所以学习数据库当然是至关重要的了,当然了,如果能做到非常深入那是非常好的,可是往往开发人员是没有那么多精力去非常深入的学习数据库的,我想的话,能够达到OCA的标准就够用了,再深入点也可达到OCP的标准,大师级的暂时可以不用想了。
2、在你工作中遇到什么样恶心的sql,吐槽下?
大家知道,Oracle的SQL语句是从下到上处理Where子句中的多个查询条件,所以表连接语句应写在其他WHERE条件前,可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。结果某人习惯性把这种条件放到前面去。。。。结果可想而知。
3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
举几个例子吧:
一是复杂操作,比如说UPDATE、SELECT 语句 写得很复杂(经常嵌套多级子查询),这个时候就可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作。还有就是尽量避免在一个复杂查询里面使用 LIKE '%parm1%', 百分号会导致相关列的索引无法使用,最好不要用。
二是在可以使用UNION ALL的语句里,使用了UNION,UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNION ALL,如xx模块的某个查询程序就曾经存在这种情况,见,由于语句的特殊性,在这个脚本中几个子集的记录绝对不可能重复,故可以改用UNION ALL
三是在WHERE 语句中,尽量避免对索引字段进行计算操作,这个常识相信绝大部分开发人员都应该知道,但仍有不少人这么使用,我想其中一个最主要的原因可能是为了编写写简单而损害了性能,那就不可取了。
四是排序的时候避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序。
等等。。。
4、大家有没有为了sql跟开发急眼的时候,分享下。
当然是有的,在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于数据量大的情况,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,所以为了sql跟开发急眼很正常。 |
|