数据库开发规范整理

1.SQL语句使用大写:因为oracle总是先解析sql语句,把小写字母转换成大写的再执行

2.索引:

   a.避免在索引上使用NOT;

   b.避免在索引列上使用计算;

   c.不要在经常修改的字段上建索引,会影响update\insert\delete等操作效率;

   d.避免在索引列上使用IS NULL和NULL;

   e.总是使用索引的第一个列(组合索引的第一个列被where子句引用时,优化器才会选择使用该索引)

   f.使用where替代order by(orderr by使用索引比较严格)

   g.避免改变索引列的类型(oracle自动对列进行简单的类型转换,且会优先转换数值类型到字符类型)

   h.某些where子句不适用索引('!=':索引只能告诉你什么存在于表中,而不能告诉你什么不存在;‘||’;‘+’像函数的会停止使用索引;相同索引列不能互相比较,这样会权标扫描)

   i.检索数据量超过30%的表中记录数据,使用索引将没有显著的效果提高;

3.使用>=替代>:两者区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录,而后者将首先定位到DEPTNO=3的记录并且详情扫描到第一个DEPT大于3的记录;

4.禁止对大字段(varchar(2000))值进行order by\distinct\group by\union之类的操作,会消耗大量的CPU和内存资源;

5.两个表连接查询时,数据量小的表作为基础表(离from最远);三个及以上的表连接查询时,交叉表作为基础表;

6.避免使用select *;

7.使用where子句替换HAVING子句,HAVING只会检索出所有记录后才对结果进行过滤;

8.多表查询时,使用表的别名,检索解析时间、避免歧义引起的语法错误;

9.使用exists替代in、 用not exists替代not in、使用exists替换distinct(exists查询更为迅速,RDBMS核心模块将子查询的条件一旦满足立即返回结果);

10.识别’低效执行’的SQL语句

虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法:

SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS>0 AND BUFFER_GETS > 0 AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 ORDER BY 4 DESC;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
规范可有效提高SQL代码的可读性及性能,降低维护成本 一、文档说明 1.1 文档目的 1.2 术语定义 二、数据库对象命名规则 2.1 表对象命名规则 2.2 视图对象命名规则 2.3 物化视图对象命名规则 2.4 序列对象命名规则 2.5 触发器对象命名规则 2.6 主键对象命名规则 2.7 外键对象命名规则 2.8 唯一性索引对象命名规则 2.9 非唯一性索引对象命名规则 2.10 存储过程对象命名规则 2.11 临时表命名规则 2.12 转储表命名规则 2.13 分区表命名规则 三、表字段命名规范 3.1 字段命名规范 3.2 字段类型选择规范 四、SQL开发的规则 4.1 SQL语句统一为大写字母 4.2 禁止使用 SELECT * 操作 4.3 禁止使用 SELECT COUNT(*) 操作 4.4 规范表的连接顺序 4.5 使用有意义的表别名 4.6 多表连接限制 4.7 使用绑定变量 4.8 序列的创建需要添加CACHE 4.9 分批提交大事务 五、PL/SQL开发的规则 5.1 PLSQL通用规则 5.2 PLSQL变量命名规范 5.3 PLSQL异常处理 六、索引创建的指引规则 6.1 索引对象命名规则 6.2 索引创建的一些基本规则 6.3 索引使用的一些基本规则 附录一(性能相关事项) 7.1 让SQL走合理索引,避免全表扫描 7.2 避免类型转换 7.3 限制查询的时间范围 7.4 UNION&UNION; ALL的使用原则 7.5 LIKE的使用原则 7.6 避免在索引字段上添加函数 7.7 引入工作表概念 7.8 定期清理或归档表中的垃圾数据 7.9 使用分区表 7.10 其他注意点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值