数据库开发规范整理

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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值