收藏 分销(赏)

SQL编码规范教材.ppt

上传人:精*** 文档编号:5469363 上传时间:2024-11-10 格式:PPT 页数:64 大小:969KB 下载积分:14 金币
下载 相关 举报
SQL编码规范教材.ppt_第1页
第1页 / 共64页
SQL编码规范教材.ppt_第2页
第2页 / 共64页


点击查看更多>>
资源描述
www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训SQL编码规范教材SITECHwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障11.1 概述1.2 范围www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述概述制定编码规范的最主要的目的是为了对产出代码的长期制定编码规范的最主要的目的是为了对产出代码的长期维护。通常负责维护代码的人大多都不是开发者本人,如果维护。通常负责维护代码的人大多都不是开发者本人,如果有一个统一的代码格式以及说明就可以减少混淆提高理解速有一个统一的代码格式以及说明就可以减少混淆提高理解速度。因此,下列的编码规范是基于良好的编码习惯和可读性度。因此,下列的编码规范是基于良好的编码习惯和可读性的原则来制定的。的原则来制定的。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训范围范围本规范定义了所有代码编写者在编写SQL程序时应遵守的一些规则和习惯。本规范采用以下术语描述:规则规则:编程时强制必须遵守的原则。建议建议:编程时必须加以考虑的原则。说明说明【】:对此规则或建议进行必要的解释。示例示例:对此规则或建议从正、反两个方面给出例子。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障22.1一般规则一般规则2.2 E-SQL排版规则排版规则www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训一般规则一般规则规则规则2.1独立单元书写规则:独立单元书写规则:整个文件,以过程、函数或包为相对独立的单元。在每个单位中,采用以下统一格式。示例:CREATEorREPLACEASBEGINEXCEPTIONEND;即:CREATE、AS、BEGIN、EXCEPTION和END,在第1列。后面的内容,间隔1个TAB书写。除非内部处理,否则一律带上EXCEPTION。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训一般规则一般规则规则规则2.7循环语句:循环语句:循环开始语句(FOR、WHILE)跟LOOP语句分行。ENDLOOP语句,跟LOOP在同一列位置。示例:FORv_IndexIN1.20LOOPENDLOOP;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训一般规则一般规则规则规则2.7循环语句:循环语句:一行最长不能超过80字符。当超过时,以语意为单位,进行断行,且断行后的内容,缩进书写。示例:-创建汇总基础表Create_BaseDat-p_BaseSQLinvarchar-SQL语句-p_sResultTBLinvarchar-结果输出数据表-p_sInfoStrinvarchar-提示信息-返回值:0记录数FunctionCReate_BaseData(p_BaseSQLinvarchar,p_sResultTBLinvarchar,p_sInfoStrinvarchar2)RETURNINT;此外,SELECT/FROM/WHERE/ORDERBY/GROUPBY等子句必须另起一行写。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训一般规则一般规则规则规则2.9空格:空格:SQL内算数运算符、逻辑运算符连接的两个元素之间必须用空格分隔。逗号之后必须接一个空格。关键字、保留字和左括号之间必须有一个空格。规则规则2.10大小写规则大小写规则SQL语句中出现的系统保留字、内置函数名、SQL保留字、绑定变量等都应大写。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障22.1一般规则一般规则2.2 E-SQL排版规则排版规则www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训E-SQL排版规则排版规则规则规则2.11在EXECSQL语句后加一个TAB键,然后再写SQL语句。规则规则2.12SQL语句的关键字SELECT、FROM、WHERE、AND等,必须尾部对齐。规则规则2.13语句的结束符“;”,放在语句的结束位置,不单独起一行。规则规则2.14SQL语句中不能有注释,如“/*/”、“-”等,注释写在SQL语句的外面。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训E-SQL排版规则排版规则规则规则2.15SQL语句中的对齐方式用空格对齐,SQL语句到“EXECSQL”之间用TAB对齐。示例:EXEC SQLSELECT COL1,COL2 FROM tab1 WHERE col1=?AND col2=?;规则规则2.16每个嵌入的EXECSQL语句,必须单独一行开始。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障33.1注释规则规则www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训注释规则注释规则规则规则3.1对象注释要求对象注释要求创建每一数据库对象时都要加上COMMENTON注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上COMMENTON注释,以说明该列和/或列取值的含义。示例:commentontableRasInfo.TD_UserInfois普通地区用户信息表,用于记录除成都外的其他地区的用户信息,按地区分区;commentoncolumnRasInfo.TD_UserInfo.UserCodeis用户编码,主键;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训注释规则注释规则规则规则3.2文件注释文件注释在每个SQL脚本文件的开头,要用块注释,进行文件功能说明,文件编写人、联系方式和文件创建时间说明等。由于PL/SQL语句的特殊性,每行注释前以-为标志。示例:-收入保障系统收入保障系统后台数据库脚本后台数据库脚本-特殊号码汇总计算程序特殊号码汇总计算程序dsras_pkgSpecal_CalcSum.SQL-文本责任人:文本责任人:xxxx(xxxxsi-)-2007.02.28开始创建开始创建-www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训注释规则注释规则规则规则3.3过程与函数的注释过程与函数的注释在每个过程或函数的开头,使用块注释,进行函数功能说明,入口出口参数和返回值说明。示例:-得到集团用户外部编码。-authorxxxx-version%I%,%G%-since1.00-inparamregionCode地市代码-inparamsmCode业务代码-outparamgrpUserNo集团用户编码-return返回0表示正确,否则出错!-www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训注释规则注释规则规则规则3.4变量注释变量注释对SQL代码中的局部变量,重要的,要进行注释。尤其对Package和OBJECT中的内部全局变量,特别要进行注解。关于变量的注释,采用行尾注释。示例:TYPERefCursorISREFCURSOR;-定义参考游标类型-最大欠费用户指标所在地区描述f_AreaNameVarChar(20);对常量及变量注释时,应注释被保存值的含义,包括合法取值的范围。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训注释规则注释规则规则规则3.5参数注释参数注释对函数或过程的每个参数进行说明。如果取值范围确定,也一并说明。取值有特定含义的变量(如boolean类型变量),给出每个值的含义。规则规则3.6功能性注释功能性注释对较为复杂的SQL语句应注释,并说明算法和功能。应对不易理解的分支条件表达式加注释。对重要的计算应说明其功能。过长的函数实现,应将其语句按实现的功能分段加以概括性说明。规则规则3.7单行注释单行注释SQL程序中,尽量采用单行注释:-。这样,有利于程序调试时,通过块注释方式,实现大段代码注释。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训数据库对象数据库对象建议建议4.1命名长度和结构命名长度和结构对象名不超过30个字符,不低于6个字符,建议在825个左右。由35部分构成,每部分为有一定含义的英文缩写或者数字。每部分建议为34个字符。英文缩写参见“常见缩写字典”。规则规则4.2不得出现省市、项目简称不得出现省市、项目简称不允许出现某省某地市或某项目的简称,例如sc_CustInfo中的sc是不许可的。规则规则4.3年月日等数字年月日等数字年月日数字符号,一般应在数据表的尾部。不允许将年月日及其它数字放在对象名的中间。例如,Cust200703Info不许可,CustInfo200703则许可。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训数据库对象数据库对象规则规则4.4区分非正式表区分非正式表存在于生产环境的非正式表,如备份表,必须以原表名加前缀bakyymmdd_,以便于识别和及时清理。因此,正式生产表中,最好不要出现BAK、BACK之类的字符串。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训数据库对象数据库对象规则规则4.5命名特例命名特例编号编号数据库对象数据库对象格式范例格式范例备注备注1全局临时表(golbal temporary table)gTmp_XxxYyyZzz全局临时表属于ORACLE的一种特殊的表类型,不是指临时创建的非正式表2视图View_XxxYyyZzz3普通索引Idx_TabName_ColumnNameColumnName是该索引第一个字段的简写4主键索引Idx_TabName_Pk5同义词必须与原对象名一致若已存在相同的对象名,必须合理调整该冲突对象名或者放弃使用同义词6触发器Trg_XxxYyyZzz7存储过程Prc_XxxYyyZzz8程序包Pkg_ XxxYyyZzz9函数Func_XxxYyyZzz10序列Seq_XxxYyyZzz11数据链路Link_UserName_DbNameDBNAME是指远程数据库的名称,USERNAME是指该远程库的用户名12分区表中的分区名Part_Xxxwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训PL/SQL程序块内变量程序块内变量规则规则4.6程序块内变量命名程序块内变量命名全局变量,以g_开头进行命名;包内公用变量,以f_开头命名;过程局部变量,以v_开头命名;参数变量,以p_开头命名;游标变量,以cur_开头命名。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训E-SQL源文件源文件规则规则4.7:E-SQL源文件命名源文件命名源文件命名规则,一般如下:RXX_XX.pc或者RXX_XX.cp我们以前的E-SQL命令一般都用*.cp,而国际标准一般都用*.pc。特此约定,以前的程序目录沿用*.cp,新的程序目录使用*.pc命名。文件名以大写字母R开头,后面跟操作代码。操作代码的前两位放在最前面,后面的两位按照顺序放在“_”的后面,如R11_04060820。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训常用英文缩写字典常用英文缩写字典规则规则4.8:业务操作类(一):业务操作类(一)中文名称中文名称英文名称英文名称英文缩写英文缩写读取getget设置setset查询queryqry变更changechg提交、确认confirmcfm冲正、回滚rollbackroll验证validatevali比较comparecmp创建createcrt选择selectsel插入insertins修改updateupd删除deletedelwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训常用英文缩写字典常用英文缩写字典规则规则4.8:业务操作类(二):业务操作类(二)中文名称中文名称英文名称英文名称英文缩写英文缩写转移transfertran替换replacerpl计算calculatecalc统计statisticstat申请requestreq预约、预订bookbook订购orderord退订cancelcanc打开onon关闭offoff配置configcfg分配allocateallowww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训常用英文缩写字典常用英文缩写字典规则规则4.8:业务操作类(三):业务操作类(三)中文名称中文名称英文名称英文名称英文缩写英文缩写结算mediationmed费用feefee发布releaserls跟踪tracetrac清除clearclr稽核auditaud开户、入网openopen业务变更changechg查询queryqry过户Change customerchgCust缴费paymentpay托收contractconwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训常用英文缩写字典常用英文缩写字典规则规则4.9:业务名词类(一):业务名词类(一)中文名称中文名称英文名称英文名称英文缩写英文缩写代码codecode类型typetype标识identifierid号码No.no序号seriationser名称namename消息messagemsg信息informationinfo历史historyhis日志loglog密码passwordpsw状态statussta日期datedatewww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训常用英文缩写字典常用英文缩写字典规则规则4.9:业务名词类(二):业务名词类(二)中文名称中文名称英文名称英文名称英文缩写英文缩写时间timetime科目itemitem关系relationrlt组织、机构organizationorg角色rolerole地址addressaddr担保assurerass版本versionver级别levellev电话phoneph合同contractcon发票invoiceinv接口Interfaceintfwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训常用英文缩写字典常用英文缩写字典规则规则4.9:业务名词类(三):业务名词类(三)中文名称中文名称英文名称英文名称英文缩写英文缩写操作oprationop功能functionfunc客户customercust集团groupgrp用户subscribersub帐户accountacc产品productprd服务servicesvc价格pricepri资源resourceres权限powerpowwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障55.1 PL/SQL程序块5.2 E-SQL程序5.3可读性要求5.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训PL/SQL程序块程序块规则规则5.1简单函数或过程:简单函数或过程:单一功能函数或过程单一功能函数或过程(以含注释在内,不超过以含注释在内,不超过100行就能解决问题为标准行就能解决问题为标准),约定采用独立过程或函数来实现。,约定采用独立过程或函数来实现。示例:示例:-是否是一个有效的数值是否是一个有效的数值-参数:参数:-p_NumStrinvarchar2-字符型数字串字符型数字串-返回值:返回值:-如果是数值,返回如果是数值,返回true;否则返回;否则返回false-CREATEORREPLACEFunctionRasInfo.IsNumber(p_NumStrinvarchar2)returnbooleanASv_NumNumber;BEGINIFp_NumStrISNULLTHENreturnFalse;ENDIF;v_Num:=To_Number(p_NumStr);ReturnTrue;EXCEPTIONWHENOTHERSTHENRETURNFalse;END;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训PL/SQL程序块程序块规则规则5.2不允许使用内嵌函数或过程:不允许使用内嵌函数或过程:尽管ORCALE支持内嵌,但是不允许使用内嵌函数或过程。规则规则5.3复杂函数或过程:复杂函数或过程:功能比较复杂的函数,不建议使用独立函数或过程的实现。必须使用Package或OBJECT技术来实现。按照功能相近或相似原则,进行package或object的组织。复杂的业务逻辑,采用OBJECT技术来实现。公用的基础功能,采用package技术实现。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障55.1 PL/SQL程序块5.2 E-SQL程序5.3可读性要求5.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训E-SQL程序程序规则规则5.4:SQL语句出错判断,使用NOTFOUND、SQLOK等宏判断SQL语句是否正确执行。规则规则5.5:E-SQL使用自己的出错控制,不使用E-SQL提供的统一出错控制,E-SQL的出错一般设置为无效。EXECSQLWHENEVERSQLERRORCONTINUE;EXECSQLWHENEVERSQLWARNINGCONTINUE;EXECSQLWHENEVERNOTFOUNDCONTINUE;规则规则5.6属主变量都要放在属主变量都要放在SQL定义区统一定义:定义区统一定义:EXECSQLBEGINDECLARESECTION;charsSql1024;EXECSQLENDDECLARESECTION;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障55.1 PL/SQL程序块5.2 E-SQL程序5.3可读性要求5.4常用英文缩写字典www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训可读性要求可读性要求规则规则5.7不允许使用不允许使用SELECT*:使用SELECT语句时,不允许使用SELECT*,要使用明确的列名。目的是防止数据字段增加后的影响。规则规则5.8INSERT必须指定插入的字段名:必须指定插入的字段名:使用INSERT时,必须指定插入的字段名,主要是考虑以后表结构的变动。规则规则5.9函数及表达式放在等号左边:函数及表达式放在等号左边:应将SQL语句中的数据库函数、计算表达式等放置在等号右边。不要在等号的左边。规则规则5.10不等于统一使用不等于统一使用:Oracle认为!=和是等价的,都代表不等于的意义。为了统一,不等于一律使用表示。规则规则5.11使用表的别名:使用表的别名:多表关联查询,必须使用表的别名。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障66.1性能相关的规则6.2性能相关的建议www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的规则性能相关的规则规则规则6.1添加索引提高效率:添加索引提高效率:对大表的操作,业务规范后,必须建立相应的索引,以提高查询效率。规则规则6.2WHERE子句中不应对索引列使用函数:子句中不应对索引列使用函数:不要在WHERE子句中,不应该对索引列施以函数,否则该索引将无法使用。规则规则6.3使用显式的类型转换:使用显式的类型转换:不要使用数据库的类型自动转换功能(如数字自动转换为字符串),应使用显式的类型转换。自动转换时往往导致该字段的索引无法使用。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的规则性能相关的规则规则规则6.4为共享为共享SQL语句,要使用绑定变量:语句,要使用绑定变量:执行相同操作的SQL语句必须使用相同名字的绑定变量例如:第一组的两个SQL语句,绑定变量是相同的,而第二组中的两个语句绑定变量不同,即使赋于不同的绑定变量相同的值也不能使这两个SQL语句相同,达不到共享SQL语句目的。a)第一组selectpin,namefrompeoplewherepin=:blk1.pin;selectpin,namefrompeoplewherepin=:blk1.pin;b)第二组selectpin,namefrompeoplewherepin=:blk1.ot_ind;selectpin,namefrompeoplewherepin=:blk1.ov_ind;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障66.1性能相关的规则6.2性能相关的建议www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.5减少子查询的使用:减少子查询的使用:子查询除了可读性差之外,还在一定程度上影响了SQL运行效率.应尽量减少子查询的使用,采用其他效率更高、可读性更好的方式替代。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.6使用使用DECODE函数来减少处理时间:函数来减少处理时间:使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.示例:SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0020ANDENAMELIKESMITH%;SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKESMITH%;可以用DECODE函数高效地得到相同结果SELECTCOUNT(DECODE(DEPT_NO,0020,X,NULL)D0020_COUNT,COUNT(DECODE(DEPT_NO,0030,X,NULL)D0030_COUNT,SUM(DECODE(DEPT_NO,0020,SAL,NULL)D0020_SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL)D0030_SALFROMEMPWHEREENAMELIKESMITH%;类似的,DECODE函数也可以运用于GROUPBY和ORDERBY子句中www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.7用用UNION替换替换OR(适用于索引列适用于索引列):通常情况下通常情况下,用用UNION替换替换WHERE子句中的子句中的OR将会起到较好的效果将会起到较好的效果.对索引列使用对索引列使用OR将造成全表扫描将造成全表扫描.注意注意,以上规则只以上规则只针对多个索引列有效针对多个索引列有效.如果有如果有column没有被索引没有被索引,查询效率可能会因为你没有选择查询效率可能会因为你没有选择OR而降低而降低.在下面的例子中在下面的例子中,LOC_ID和和REGION上都建有索引上都建有索引.高效:高效:SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10UNIONSELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHEREREGION=“MELBOURNE”低效:低效:SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10ORREGION=“MELBOURNE”注意注意:WHEREKEY1=10(返回最少记录返回最少记录)ORKEY2=20(返回最多记录返回最多记录)ORACLE内部将以上转换为内部将以上转换为WHEREKEY1=10AND(NOTKEY1=10)ANDKEY2=20)www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.8如何删除重复记录:如何删除重复记录:高效的删除重复记录方法(因为使用了ROWID)DELETEFROMEMPEWHEREE.ROWID(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);建议建议6.9用用TRUNCATE替代替代DELETE删除全表:删除全表:当删除表中的所有记录时,如果不需要恢复,建议使用TRUNCATE而不是DELETEALL,既不占用回滚段,也能加快速度。建议建议6.10特大事务多使用特大事务多使用COMMIT:在程序中尽量避免特大事务,多使用COMMIT,这样程序的性能得到提高,也会因为COMMIT所释放的资源而减少。当然要注意,COMMIT次数也不能太频繁,频繁同样会增加数据库负担。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.11用用Where子句替换子句替换HAVING子句:子句:避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤.这个处理需要排序,总计等操作.如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销.示例:低效:SELECTREGION,AVG(LOG_SIZE)FROMLOCATIONGROUPBYREGIONHAVINGREGION!=SYDNEYANDREGION!=PERTH高效:SELECTREGION,AVG(LOG_SIZE)FROMLOCATIONWHEREREGION!=SYDNEYANDREGION!=PERTHGROUPBYREGIONwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.12用用EXISTS替代替代IN:在许多基于基础表的查询中在许多基于基础表的查询中,为了满足一个条件为了满足一个条件,往往需要对另一个表进行联接往往需要对另一个表进行联接.在这种情况下在这种情况下,使用使用EXISTS(或或NOTEXISTS)通常将提高查询的效率通常将提高查询的效率.示例:示例:低效:低效:SELECT*FROMEMP(基础表基础表)WHEREEMPNO0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=MELB)高效高效:SELECT*FROMEMP(基础表基础表)WHEREEMPNO0ANDEXISTS(SELECTXFROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=MELB)www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.13用用NOTEXISTS替代替代NOTIN:无论在哪种情况下无论在哪种情况下,NOTIN都是最低效的都是最低效的(因为它对子查询中的表执行了一个全表遍历因为它对子查询中的表执行了一个全表遍历).可以把它改写成外连接可以把它改写成外连接(OuterJoins)或或NOTEXISTS.示例:示例:SELECTFROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NOFROMDEPTWHEREDEPT_CAT=A);(方法一方法一:高效高效)SELECT.FROMEMPA,DEPTBWHEREA.DEPT_NO=B.DEPT(+)ANDB.DEPT_NOISNULLANDB.DEPT_CAT(+)=A(方法二方法二:最高效最高效)SELECT.FROMEMPEWHERENOTEXISTS(SELECTXFROMDEPTDWHERED.DEPT_NO=E.DEPT_NOANDDEPT_CAT=A);www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.14用表连接替换用表连接替换EXISTS:通常来说,采用表连接的方式比EXISTS更有效率。SELECTENAMEFROMEMPEWHEREEXISTS(SELECTXFROMDEPTWHEREDEPT_NO=E.DEPT_NOANDDEPT_CAT=A);(更高效)SELECTENAMEFROMDEPTD,EMPEWHEREE.DEPT_NO=D.DEPT_NOANDDEPT_CAT=A;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.15用用EXISTS替换替换DISTINCT:当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。一般可以考虑用EXIST替换。示例:低效:SELECTDISTINCTDEPT_NO,DEPT_NAMEFROMDEPTD,EMPEWHERED.DEPT_NO=E.DEPT_NO高效:SELECTDEPT_NO,DEPT_NAMEFROMDEPTDWHEREEXISTS(SELECTXFROMEMPEWHEREE.DEPT_NO=D.DEPT_NO);www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.17避免在索引列上使用计算:避免在索引列上使用计算:WHERE子句中,如果索引列参与计算,优化器将不使用索引而使用全表扫描。示例:低效:SELECTFROMDEPTWHERESAL*1225000;高效:SELECTFROMDEPTWHERESAL25000/12;www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.18避免在索引列上使用避免在索引列上使用NOT:避免在索引列上使用避免在索引列上使用NOT,NOT会产生在和在索引列上使用函数相同的影响会产生在和在索引列上使用函数相同的影响.当当ORACLE”遇到遇到”NOT,会会停止使用索引转而执行全表扫描。停止使用索引转而执行全表扫描。示例:示例:低效低效:(不使用索引不使用索引)SELECTFROMDEPTWHERENOTDEPT_CODE=0;高效高效:(使用了索引使用了索引)SELECTFROMDEPTWHEREDEPT_CODE0;需要注意的是需要注意的是,在某些时候在某些时候,ORACLE优化器会自动将优化器会自动将NOT转化成相对应的关系操作符。转化成相对应的关系操作符。NOTto=toNOT=NOTwww.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训性能相关的建议性能相关的建议建议建议6.19用用=替代替代:如果如果DEPTNO上有一个索引上有一个索引,高效:高效:SELECT*FROMEMPWHEREDEPTNO=4低效:低效:SELECT*FROMEMPWHEREDEPTNO3两者的区别在于两者的区别在于,前者前者DBMS将直接跳到第一个将直接跳到第一个DEPT等于等于4的记录而后者将首先定位到的记录而后者将首先定位到DEPTNO=3的记的记录并且向前扫描到第一个录并且向前扫描到第一个DEPT大于大于3的记录。的记录。www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训提纲提纲概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障77.1 程序质量保证www.si-09-Nov-24神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训程序质量保证程
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服