欢迎来到天天文库
浏览记录
ID:59403414
大小:76.50 KB
页数:5页
时间:2020-05-28
《SQL书写规范与性能优化建议.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、文韬采编收集整理SQL书写规范与性能优化建议书写规范与性能优化建议一SQL或PL/SQL书写规范1、语句中出现的所有表名、字段名全部小写。2、sql系统保留字、内置函数名、Sql保留全部字大写,select>where、update等。连接符OR、IN、AND、以及=、v=、>=等前后加上一个空格。3、对较为复杂的sql语句加上注释,说明算法、功能,注释风格:注释单独成行。(1)应对不易理解的分支条件表达式加注释;(2)对重要的计算应说明其功能;(3)过长的函数实现,应将其语旬按实现的功能分段加以概括性说明;(4)每条SQL语句均应有注释说明(表名、字段名)o(5)常量
2、及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)4、SQL语句的缩进风格(1)一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进(2)WHERE子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。5、多表连接时,使用表的别名来引用列。6、供别的文件或函数调用的函数,绝不应使用全局变量交换数据。7、变量令名不能超出ORACLE的限制(30个字符),令名要规范,要用英文令名,从变量上能看到变量的作用,如g名称全局变量m名称局部变量c名称光标p名称参数8、杳找数据库表或视图时,只能取出确实需要的那些字段,不要使用*来代替
3、所有列名。要清楚明白地使用列名,而不能使用列的序号。9、功能相似的过程和函数,尽量写到同一个包中,加强管理。10、尽量不要使用视图、临时表、自定义函数、日定义过程之类的对象进行辅助算运,尽量用一条SQL实现要求。11、在写查询条件时注意使用索引,注意复合索引组成字段的顺序,如果没有索引,请及时与DBA联系,注意where条件中的字段顺序应该以表中的字段顺序为准,尽量有优于后期的数据库优化。12、在查询语句中查魂表达式左边不允许出现函数及其它运算表达式,所有左边的表达式都可以用其它的方法在右边实现13、所有写好的SQL最好能在Leccosqlexpert上进行格式化并进行
4、优化,注意执行计划及运行时间,如果有问题请及时与DBA联系。14、SQL书写优化性能建议(1)避免嵌套连接、子查魂(多级)如:A=BandB=CandC=D(2)where条件中尽量减少使用常量比较,改用BindVariable变量⑶大量的排序操作影响系统性能,所以尽量减少orderby和groupby排序操作。15、必须使用排序操作,请遵循如下规则:(1)排序尽量建立在有索引的列上。⑵如结果集不需唯一,使用unionall代替union016、关于索引的使用(1)尽量避免对索引列进行计算,如对索引列计算较多,请系统管理员建立函数索引。(2)尽量注意比较值与索引列数据类
5、型的一致性,不要发生隐性转换文韬采编收集整理⑶对于复合索引,SQL语句必须使用主索引列(4)索引中,尽量避免使用NULLo(5)对于索引的比较,尽量避免使用NOT=(!=)(6)杏询列和排序列与索引列次序保持一致17、尽量避免相同语句由于书写格式的不同,而导致多次语法分析,尽量使用Bind变量。18、查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面。19、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。2()、in、or了句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把了句拆开;拆开的了句中应该
6、包含索引。21、其他经验性规则(1)尽量少用嵌套查询如必须,请用notexist代替notin了句。如例⑵用多表连接代替EXISTS了句。如例⑶少用DISTINCT,用EXISTS代替如例(4)使用UNIONALL.MINUS>INTERSECT提高性能(5)使用ROWID提高检索速度⑹使用优化索引机制进行访问路径控制,使用cursorHj,显示光标优于隐式光标本规范示例范示例:木规范示例:例一:SELECTaka042-单位缴费划入个人帐户比例INTOprm_aaa043FROMkaOl-医疗保险单位缴费划入个人帐户比例分段信息WHEREakc021=rec_kc01
7、.akc021-医疗人员类别ANDaka041>=rec_kc01.akc023-年龄上限ANDaka040<=rec_kc01.akc023―年龄下限ANDaae030<=prm_date―开始时间AND(aae031>=prm_dateORaae031ISNULL);-终止时间例二:SELECT......FROMempWHEREdept_noNOTIN(SELECTdept.noFROMdeptWHEREdept_cat=,A,);SELECT......FROMempeWHERENOTEXISTS(SELECTXFROMdeptW
此文档下载收益归作者所有