欢迎来到天天文库
浏览记录
ID:37911513
大小:144.00 KB
页数:16页
时间:2019-06-02
《SQL编码规范建议》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、SQL编码规范建议(Oracle)文档状态[√]初稿[]评审通过[]修改[]发布[]作废文档标识当前版本作者部门/厂商完成日期SQL编码规范建议(Oracle)文档版本历史表版本号作者操作日期说明V0。1陈强创建2012-11-16文档审核记录表版本号审核人审核人签字审核日期说明ÓSSC-16-SQL编码规范建议(Oracle)ÓSSC-16-SQL编码规范建议(Oracle)目录引言51.1.简介51.2.目的51.3.参考文献52.SQL编码规范52.1.查询SQL语句52.2.DML操作72.3.通用规范
2、82.4.共享SQL语句83.性能优化93.1.执行计划分析SQL性能93.2.优化器103.3.语句顺序(RBO中有效)103.4.减少数据库或表访问次数113.5.函数使用133.6.索引143.7.其他15ÓSSC-16-SQL编码规范建议(Oracle)引言1.1.简介所有的程序开发手册都包含了各种规则。一些习惯自由程序的人(例如Java程序员)可能对这些规则很不适应,但是在多个开发人员共同协作的情况下,这些规则是必需的。这不仅仅是为了开发效率,而且也为了测试和后期维护。良好的编码习惯有助于标准化程序的
3、结构和编码风格,使源代码对于自己和别人都易读和易懂。在开发周期中越早使用恰当的编码规定,将会最大程度的提高项目的生产率。良好的编码习惯除了代码格式,详细的注释外,还应该包括使用有助于提高程序效率的编码方式。规范的开发有助于提高源码的可读性,可维护性,对于提高项目的整体效率更是不可缺少的(尤其是团队开发)。1.2.目的本文是针对程序员对SQL语句编写过程所应遵循的规范。按照此规范来开发SQL语句可带来以下好处:lSQL语句编写保持一致性;l提高代码的可读性和可维护性;l提高SQL语句执行的效率;l易于代码的回顾。
4、1.3.参考文献lORACLESQL性能优化系列2.SQL编码规范2.1.查询SQL语句1)不等于统一使用"<>":Oracle认为“!=”和“<>”是等价的,都代表不等于的意义。为了统一,不等于一律使用“<>”表示。2)使用表的别名(Alias):多表连接时,应为每个表使用别名,别名要简短最好一个字母,且能代表一定意义,所有被引用列要加上表的别名。当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上。可减少解析的时间同时减少那些由Column歧义引起的语法错误。3)使用SELECT语句
5、时,必须指出列名:不要使用列的序号或者用“*”替代所有列名。ÓSSC-16-SQL编码规范建议(Oracle)当在SELECT子句中列出所有的列COLUMN时,使用动态SQL列引用‘*’是一个方便的方法,但这是一个非常低效的方法。实际上,ORACLE在解析的过程中,会将‘*’依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。1)减少子查询的使用:子查询除了可读性差之外,还在一定程度上影响了SQL运行效率。请尽量减少子查询的使用,采用其他效率更高、可读性更好的方式替代。2)适当添加
6、索引以提高查询效率:适当添加索引可以大幅度的提高检索速度。同时不要在WHERE字句中对索引列执行函数操作,同时避免隐式转换。3)用EXISTS替代IN:在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOTEXISTS)通常提高查询的效率。4)用NOTEXISTS替代NOTIN:在子查询中,NOTIN子句将执行一个内部的排序和合并。无论在哪种情况下,NOTIN都是最低效的(因为它对子查询中的表执行了一个全表遍历,然后进行过滤)。为了避免使用NOTIN,可
7、以把它改写成外连接(OuterJoins)或NOTEXISTS。5)计算记录条数:对索引列的计数是最快的,例如:COUNT(EMPNO)。6)用表连接替换EXISTS:通常来说,采用表连接的方式比EXISTS更有效率。例如:低效:SELECTENAMEFROMEMPEWHEREEXISTS(SELECT‘X'FROMDEPTWHEREDEPT_NO=E。DEPT_NOANDDEPT_CAT=‘A');高效:SELECTENAMEFROMDEPTD,EMPEWHEREE。DEPT_NO=D。DEPT_NOANDD
8、EPT_CAT=‘A';7)用EXISTS替换DISTINCT:当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。一般可以考虑用EXIST替换。例如:ÓSSC-16-SQL编码规范建议(Oracle)低效:SELECTDISTINCTDEPT_NO,DEPT_NAMEFROMDEPTD,EMPEWHERED。DEPT_NO=E。DE
此文档下载收益归作者所有