一、书写规范

1、sql编写时,大小写一致

2、关键字单占一行,如select、from、where、and、group by、order by等

3、注意行缩进和对齐,建议语句中的关键字右对齐

4、使用空格,SQL语句内的算术运算符、逻辑运算符(AND、OR、NOT)、 比较运算符(=、<=、>=、>、、BETWEEN AND)、IN、LIKE等运算符前后都应加一空格。

5、对较为复杂的sql语句加上注释,说明算法、功能。

注释风格:注释单独成行、放在语句前面。

单行注释:--

多行注释:/*    */

6、多表连接时,使用表的别名来引用列。

7、select后面的每一列(列数目大于1)单独占一行,where后面的每个条件(条件数大于1)单独占一行。

8、update set子句内容每一项单独占一行,无缩进。

9、insert子句内容每个表字段单独占一行,无缩进;values每一项单独占一行,无缩进 。

二、书写优化性能建议

1、关键SQL语句,尽量简化,不要包含太多的嵌套,避免执行计划错误的可能,原则上不能超过2层。

2、SQL语句包含多表连接时,建议使用表别名,对每个字段的使用都要带上表别名,例如: select a.col1, a.col2, b.col3 from table_name a, tableb b where a.col4=b.col5;

3、使用SELECT语句时,禁止使用select * ,应当指出具体查询的字段名,例如:select col1,col2,col3,… from table_name;。

4、使用INSERT语句时,禁止使用 insert into table_name values(?,?,?),不应不指定字段名直接插入VALUES,应指定插入的字段名,例如: insert into table_name (col1, col2,…) values(?,?,…)

5、避免在where使用'1=1','1=2'这种表达式作为部分条件,例如: select col1, col2 from table_name where 1=1 and col1 >0。

6、在进行多条记录的增加、修改、删除时,建议使用批量提交,降低事务的提交频度。

7、SQL语句要绑定变量实现SQL语句的共享,禁止使用常量

8、尽量少用表之间的嵌套连接。

9、尽量使用exists、not exists 替代 in、not in(大部份情况下exists 、not exists的性能都比in 、not in 好)。

10、使用union 的时候如果没有去除重复数据的要求,建议尽量用union all替代。

11、尽量避免使用order by和group by排序操作,因为大量的排序操作影响系统性能。如必须使用排序操作,尽量建立在有索引的列上。

12、索引的建立应慎重考虑,不是越多越好。索引可以提高相应的select的效率,但同时也降低了INSERT、UPDATE 的效率。

13、Where 条件中的索引列应避免使用<>、not、 is null、is not null、 like ‘%xxxx%’、’%xxx’、oracle系统函数等,这些常会使索引失效。

14、避免不必要的类型转换

15、in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。

16、使用ROWID提高检索速度。对SELECT得到的单行记录,需进行DELETE、UPDATE操作时,使用ROWID将会使效率大大提高。

17、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from后边最后一个表)。

18、尽量避免对索引列进行计算。如对索引列计算较多,请让数据库管理员建立函数索引。

19、尽量不用联合列比如:a||b=c||d。

20、主键尽量不要用oracle指定的名称,要自己根据表来命名。

21、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

22、复合索引创建时,建议按字段可选性高低进行排序,即字段值多的排在前面。

oracle中书写规范,oracle sql书写规范相关推荐

  1. oracle近三个月内,在oracle中的前三个月SQL

    我有以下的sql,它给了我最后一整个三个月的人处理的档案报告,但我想采用它,以便从前三个月获得这些,例如,当我运行现在我应该从2011年10月11日和12日以及2012年1月2日和3日的4月份获得档案 ...

  2. 【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?

    ♣题目 部分 在Oracle中,如何获取SQL历史执行计划? ♣答案部分 历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示: 1SE ...

  3. 【DB笔试面试609】在Oracle中,SPM(SQL Plan Management,SQL计划管理)是什么?

    ♣题目 部分 在Oracle中,SPM(SQL Plan Management,SQL计划管理)是什么? ♣答案部分 Outline的缺点是太过死板,当数据量大幅度变化时无法做出相应的改变.SQL P ...

  4. oracle中插曲时间,Oracle 11G 数据库迁移【expdp/impdp】

    0x01 环境 A 机器,操作系统 CentOS7.3,Oracle版本:11G,IP地址:192.168.1.11 B 机器,操作系统 CentOS7.3,Oracle版本:11G,IP地址:192 ...

  5. oracle中prad函数_024 SQL函数

    1. 使用ORDER BY排序 (1) ORDER BY 子句的作用是什么? 用ORDER BY子句排序. 用于对结果集进行排序处理,提供了升序排序(ASC)与降序排序(DESC)如果不指定排序规则默 ...

  6. 在Oracle中利用SQL_TRACE跟踪SQL的执行

    当你在执行一条SQL语句非常慢的时候,你是不是想问Oracle怎么执行这条语句的呢? Oracle提供的SQL_TRACE工具可以让你知道你执行的SQL究竟做了什么.执行的过程会被 输出到trace文 ...

  7. oracle中正则表达式规则,Oracle SQL 正则表达式

    From:http://blog.sina.com.cn/s/blog_69e7b8d701012tuj.html 在oracle数据库当中有字符处理的函数,比如substr().replace()和 ...

  8. oracle中的open,Oracle中常用SQL操作

    学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录.后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录:还可以建临时表来实 ...

  9. oracle中查询四舍五入,Oracle SQL语句实现数字四舍五入取整

    取整(向下取整): select floor(5.534) from dual; select trunc(5.534) from dual; 上面两种用法都可以对数字5.534向下取整,结果为5. ...

  10. oracle中rowid列,Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是O ...

最新文章

  1. win10 动态磁盘 linux,win10系统动态磁盘改为基本磁盘的方法
  2. word doc怎么显示base64图片_win10系统word文档打印不出图片怎么办
  3. 用map实现数据字典功能
  4. abd.exe 需要下java吗_Abd.exe文件下载|
  5. java虚拟机编译_[四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式...
  6. ExecuteScalar
  7. Qt工作笔记-对QImage的进一步认识(关于α通道)
  8. android9 关闭点击动画,在Android app中实现九(n)宫格图片连续滑动效果
  9. It企业的上市与退市
  10. 《机器学习实战》学习总结(一)KNN分类算法原理
  11. 【紫书第五章】String、结构体、部分STL的常见用法
  12. 华为NP课程笔记14-PIM-SM和SPT切换
  13. 来LAMP兄弟连的日子
  14. GeoTrans2.4.1 用户手册 之 (六)笔记
  15. 性能测试线上培训班怎么选 3点教你在线选好培训班
  16. win7 访问局域网共享文件时提示输入网络凭据 设置开机免输入凭证进入共享盘设置
  17. 销售人员激励机制怎么定?
  18. jfreechart折线图+柱状图、柱状图(堆叠)+折线图、饼状图、环形图
  19. 电脑常用快捷键【按使用场景分类】-Windows
  20. RTCP Inactivity导致掉话

热门文章

  1. 孩子总是偷偷玩游戏,家长该怎么办?
  2. Android工具开发一(清除手机所有app缓存)
  3. Web设计中最常用的10种色调以及示例演示
  4. autohold有什么弊端吗_autohold一直开着伤车吗
  5. 华为服务器修改硬盘显示顺序,服务器硬盘顺序
  6. 光学瞄准镜测距之数学原理
  7. shell脚本括号使用
  8. C语言第六章函数实验报告,第六章实验报告
  9. 套头文件html重复,关于C++头文件重复包含的问题
  10. 汉诺塔II|汉诺塔4柱