《SQL编写规范与优化(适用于Oracle).ppt》由会员分享,可在线阅读,更多相关《SQL编写规范与优化(适用于Oracle).ppt(23页珍藏版)》请在装配图网上搜索。

1、皮皮网运维部 2012.10 一、概述 本规范侧重于代码编写过程中 SQL 语句的编写规范问题,内容涉及编 写风格、编写规范、 SQL语句编写 过程中的优化建议、不良 SQL语句 的优化等方面。 二、 SQL编写风格 2.1、 SQL语句的大小写 SQL语句的关键字统一使用全小写或全大写的方式,例如 select,update,from,where,order,by,group by declare,begin,end等。 标识符,变量和参数采用小写,如 v_sal。 数据库对象、列以及别名用小写。 2.2、 SQL语句缩进与换行 sql语句中的关键字右对齐。 select/from/wher。

2、e/order by/group by等子句应独占一行。 select子句内容如果只有一项,应与 select 同占一行。 select子句内容如果多于一项,每一项都应独占一行,并在对应 select的基础上向右缩进 8个字符。 from子句内容如果只有一项,应与 from同占一行。 from子句内容如果多于一项,每一项都应独占一行,并在对应 from的 基础上向右缩进 4个字符。 where子句内容如果只有一项,应与 where同占一行。 where子句的条件如果有多项,每一个条件应独占一行,并以 and开头, 并在对应 where的基础上向右缩进 4个字符。 update set子句内容每。

3、一项单独占一行,无缩进。 insert子句内容每个表字段单独占一行,无缩进; values每一项单独 占一行,无缩进 。 SQL语句缩进与换行示例 select语句书写的正确示例 1、 select column_name from table_name where column_name xxxxxxxxx; 2、 select a.column1, a.column2, b.column3 from table_name_1 a , table_name_2 b where a.column1 b.column2 and b.stat 2; update语句书写的正确示例 update 。

4、table_name set list_stat xxx, parent xxx, namexxx where list_no xxx and cityxxx; Insert语句书写的正确示例 insert into table_name list_no, list_stat, parent, manifest_no, div_flag values bill020, 1, 0, 000000000000007807, 0 ; 2.3、 SQL语句编写应遵循以下空格规则 1. SQL语句中不允许出现空行。 2. SQL语句内的算术运算符、逻辑运算符( AND、 OR、 NOT)、 。

5、比较 运算符( 、 、 、 、 、 BETWEEN AND)、 IN、 LIKE等运 算符前后都应加一空格。 3. 逗号之后必须接一个空格。 4. 关键字、保留字和左括号之间必须有一个空格。 三、 SQL语句编写规范 1、表结构设计的时候尽量选择合适的数据类型、 合适的长度 、避免行链 接、行迁移的出现, 外键所在的字段一定要创建索引 ,否则,对主表 进行操作, 外键所在的子表有可能被完全封锁 。 2、 SQL语句的语法应与所使用的数据库相适应。 3、关键 SQL语句,尽量简化, 不要包含太多的嵌套 ,避免执行计划错误 的可能,原则上不能超过 2层。 4、 SQL语句包含多表连接时,建议使用表。

6、别名,对每个字段的使用都要 带上表别名,例如 select a.col1, a.col2, b.col3 from table_name a, tableb b where a.col4b.col5; 5、多表关联避免超过 5个 ,可以通过 临时表 表变量 ,简化复杂的关联。 6、使用 SELECT语句时,禁止使用 select * ,应当指出具体查询的字段名 , 例如 select col1,col2,col3, from table_name; 。 7、使用 INSERT语句时,禁止使用 insert into table_name values,,, 不应不指定字段名直接插入 VALUE。

7、S,应指定插入的字段名 ,例如 insert into table_name col1, col2, values,, 8、避免在 where使用 11,12这种表达式作为部分条件,例如 select col1, col2 from table_name where 11 and col1 0。 9、字符型字段必须加单引号 ,避免 where查询条件做隐型转换时后出现混乱。 10、 SQL 语句的注释 应遵循各语言编码规范的代码注释要求。 对较为复 杂的 SQL语句应注释,并说明算法和功能。 对重要的计算应说明其功能。 四 、 SQL语句编写过程中的优化建议 应用逻辑复杂时,使用 SQL。

8、实现困难,尽量使用程序去实现。 建议使用 hint固定关键 SQL语句执行计划,原则上批量作业要用 hint 指定索引; 在进行多条记录的增加、修改、删除时,建议使用批量提交,降低 事务的提交频度。 SQL语句要绑定变量实现 SQL语句的共享,禁止使用常量。 对于分区表的查询,原则上使用分区键做条件; 尽量避免多表关联查询、特别是表之间的嵌套连接。 尽量使用 exists、 not exists 替代 in、 not in大部份情况下 exists 、 not exists 的性能都比 in 、 not in 好 。 使用 union 的时候如果没有去除重复数据的要求,建议尽量用 union 。

9、all替代。 尽量避免使用 order by和 group by排序操作,因为大量的排序操作影响系统性 能。如必须使用排序操作,尽量建立在有索引的列上。 索引的建立应慎重考虑,不是越多越好。索引可以提高相应的 select的效率, 但同时也降低了 INSERT、 UPDATE 的效率。 Where 条件中的索引列应避免使用 ,not、 is null,is not null、 likke xxxx,xxx, oracle系统函数。 开发人员对自己编写的 SQL语句,要能够简单的评估自己 所写语句的执行计划,避免显而易见的问题比如说数据 类型的隐式转换,大表上的全表扫描,对大表进行多次扫 描等等。

10、。 怎样生成执行计划,在 SQL*PLUS里面可以通过 set autotrace on 或 set autotrace traceonly explain生成 ,在 PL/SQL Developer工具里面直接按键盘上面的 F5。 五、不良 sql语句优化 例 1不合理的执行计划 ,导致 cpu使用率过高 . select count* as rCount from select * from PPFILM_COFIG where SID not in select MOV_ID from pp_code_movs where CODE_ID3 order by idx desc tem。

11、p; RCOUNT - 646 Elapsed 000021.08 执行计划 问题说明 ppfilm_config表中的记录为 1192,pp_code_movs记录为 76844 存在不必要的嵌套和排序操作(造成不合理执行计划的出现),书写不规范。 语句在执行的时候逻辑读过高 ,占用大量的 CPU资源 不合理的执行计划造成 。 语句在解析的时候会将 not in转换成 Not exists 解决方法去除嵌套和排序、使用 not exists 替代 not in 优化后的语句如下 select count* from ppfilm_cofig pg where not exists sel。

12、ect mov_id from pp_code_movs ps where ps.code_id3 and pg.sidps.mov_id ; COUNT* 646 Elapsed 000000.01 6、优化之后的执行计划和统计信息 例 2 select * 导致不必要的输入输出 例 2问题说明 pmt这张表有 45个字段,实际查询需求只需要 4个字段,使用” select *”导致大量的不必 输 入输出。 select pmt.*, to_charpmt.MOV_LASTMODIFY, yyyy-mm-dd hh24miss MOV_LASTMODIFY, to_charpmt.MOV_D。

13、ATE, yyyymmddhh24miss UPDATE_TIME, pmi.MOV_AVG_LEVEL, pmi.MOV_MARKCONUT, pmi.MOV_REVIEWCOUNT from pp_movies_info_tab pmi inner join pp_movies_tab pmt on pmi.MOV_IDpmt.MOV_ID where pmt.issearch1 and pmt.MOV_DATEsysdate and pmt.mov_id not inselect mov_id from pp_code_movs where code_id1 and instrpmt.T。

14、P_NAMELIST, 电视剧 0 and instrpmt.MOV_NAME, 预告片 0 and instrpmt.TP_NAMELIST, 综艺 0 and instrpmt.TP_NAMELIST, MTV0 and instrpmt.TP_NAMELIST, 时事 0 and instrpmt.TP_NAMELIST, 游戏 0 and instrpmt.TP_NAMELIST, 动物 0 and instrpmt.TP_NAMELIST, 军事 0 and instrpmt.TP_NAMELIST, 文化 0 and instrpmt.TP_NAMELIST, 旅行 0 and instrpmt.TP_NAMELIST, 体育 0 and instrpmt.TP_NAMELIST, 动漫 0 and instrpmt.TP_NAMELIST, 纪实 0 and instrpmt.TP_NAMELIST, 科教 0 and instrpmt.TP_NAMELIST, 广告 0 order by pmt.MOV_DATE desc; 执行计划 解决方法将 pmt.*替换成实际查询所需要的字段,结果如下 QA 谢谢 。

oracle系统开发规范,SQL编写规范与优化(适用于Oracle).ppt相关推荐

  1. mysql 开发规范_专业级的MySQL开发设计规范及SQL编写规范

    在团队开发过程中为了项目的稳定,代码的高效,管理的便捷制定内部种开发设计规范是必不可少的, 这里分享一份我们定义MySQL开发设计规范包括表设计规范,字段设计规范,SQL编写规范 数据库对象命名规范 ...

  2. 获取oracle数据库war报告,Oracle 数据库开发及SQL基础实战

    Oracle 数据库开发及SQL基础实战 一.数据库基础 主键(Primary Key): 1.某一列或某些列的组合,构成一个主键,在这张二维表里,主键必须不重复.用于在这些行之间进行唯一的区别. 2 ...

  3. oracle的开发工具有,推荐方便好用的Oracle开发工具/客户端工具

    Oracle SQL Handler,是 专为 Oracle 数据库开发人员及操作人员 精心打造的一款 Oracle 客户端工具: 超智能的SQL编辑器 : 超方便的表操作 (可以通过修改表的单元数据 ...

  4. 数据库开发 常用sql server 规范集锦

    常用 SQL Server 规范集锦 来源:静逸 链接:www.cnblogs.com/liyunhua/p/4534442.html 常见的字段类型选择   1.字符类型建议采用varchar/nv ...

  5. SQL书写规范/SQL编码规范,这一篇就够了

    SQL代码规范 SQL(Structured Query Language),结构化查询语言.在数据分析.数据开发.数据库.大数据等的领域,具有不可或缺的地位,运用十分广泛. 规范化的SQL代码,能够 ...

  6. MySQL,Oracle系统学习,以及SQL语言-----数据库篇学习笔记

    Handouts MySQL和Oracle系统学习 一. 开篇立意(~~~~必看,有说明~~~~) 二. Oracle 篇 数据库存在之意义 基础概念(必须看,后面不会说明!!!) Oracle管理系 ...

  7. 基于nodejs商城系统开发与设计(项目源码+论文设计+ppt答辩+视频录制)

    网上购物商城系统以弥补传统购物方式的弊端.在目前的商城里,如果采用网上商城方式,用户购物时就不需要到店里面排队,这样不仅能实时地了解商品的特色,而且方便了顾客,同时也减轻了商城的服务压力.随着WLAN ...

  8. Oracle中有dateadd吗,SQL Server 中add函数到 oracle date add的操作

    SQL Server 中add函数到 oracle date add的操作 oracle date add minutes How does one add a day/hour/minute/sec ...

  9. 阿里开发规范_阿里开发强制要求的11条SQL编写规范

    1. [强制]不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关. 说明:count( ...

最新文章

  1. Intellij IDEA神器常用技巧七-超好用插件推荐
  2. 参加51CTO培训,PMP考试通过啦
  3. HTML IFRAME 用法小总结
  4. photoshop8.0 安装步骤及注意事项
  5. JVM调优:heap dump信息分析
  6. 在SAP ABAP 里consume webservice的全过程
  7. OpenStack Keystone架构
  8. python可以做科学计算吗_用 Python 做科学计算之最小二乘
  9. Python:完整的语法规范
  10. ECMAScript 6----字符串的扩展
  11. 那些年使用Android studio遇到的问题
  12. 两个向量的夹角公式_平面向量夹角公式是怎么计算的 上下分别怎么算 细讲
  13. 医疗器械质量管理体系 - ISO 13485 简介
  14. 腾讯云轻量应用服务器地域节点北京、上海和广州选择攻略
  15. 美国篮球巨星科比坠机去世 年仅41岁
  16. 升级 XPLite 中的 IE
  17. 图像分辨率之1080P与1080i
  18. NumPy的实用函数整理之percentile
  19. 行政人员与固定资产管理的爱恨情仇
  20. Nightmare2

热门文章

  1. CMake中find_package的学习
  2. leetcod_1_两数之和
  3. python字符串能不能加减乘除_Python运算符可不只有加减乘除
  4. 听TED唐.泰普史考特讲区块链(从零开始学区块链 199)
  5. 民事诉讼法 主编 田平安
  6. ThreadX最小移植及tx_initialize_low_level.s的简要分析
  7. Objective-C语法之Category的使用
  8. linux c socket编程学习(1)(一些基本概念及基本的函数使用)
  9. 什么是广播风暴,如何防止局域网环路引起的广播风暴?
  10. amr格式转换为MP3格式