Oracle 性能优化

1、在select语句中避免使用 “*”

2、尽可能减小记录集行数

         限制记录集获取到的记录行数同样可以缩短语句执行时间,提高查询效率。

         SELECT USER_NAME, ADDRESS, LOGIN_ADTE

FROM LOG_EVENT

WHERE ROWNUM <= 100 ORDER BY LOGON_DATE DESC;

3、使用ROWID 高效删除重复数据

         在重复的记录中,可能所有列的内容都相同,但是ROWID 不会重复。

         DELETE FROM STU S

WHERE S.ROWID > (SELECT MIN(T.ROWID)

FROM STU T

WHERE T.SNO = S.SNO);

4、使用TRUNCATE 替代DELETE删除记录

5、高效统计记录行数(实际应用中并没有使用价值)

         使用USER_TABLES 视图查询记录行数

         SELECT TABLE_NAME, NUM_ROWS

         FROM USER_TABLES

         WHERE TABLE_NAME = ‘STU’

         补充:USER_TABLES 视图中保存了Oracle的所有用户表基本信息,包括表空间、状态、缓存等。

6、尽量多使用COMMIT

         执行COMMIT 语句后能释放的资源主要包括:

l  回滚段上用于回复数据的信息

l  被程序语句获取的锁

l  REDO LOG BUFFER 中的空间

l  Oracle 为管理上述3 种资源的内部花销

7、避免使用HAVING 语句

         HAVING 语句只会在检索出所有记录之后才对结果集进行过滤。若能通过WHERE 子句限制查询的数目,可以减少这方面的开销。

8、用EXISTS 替代IN 谓词

         带有EXISTS 谓词的子查询不返回任何实际数据,只产生逻辑真值TRUE 或逻辑假值FALSE。

9、使用 “>=” 代替 “>” 运算符

10、避免在SELECT 子句中使用DISTINCT 关键字

         补充:消除重复记录可以通过子查询、GROUPBY 等其他方式实现,对于大数据来说,尽量避免使用DISTINCT。

11、用索引提高查询效率

12、避免在索引列上进行运算

         在索引列上进行运算,将导致索引失效。

13、在索引列上使用UNION替代OR

         在SELECT 语句中对索引列进行OR操作,此时索引将不会被引用。对索引列使用OR 运算符将造成全表扫描。

         补充:使用UNION 代替OR 操作规则只针对多个索引列有效,如果有的列没有索引,检索效率可能反而会因为没有选择OR 而降低。

14、避免在索引列上使用ISNULL 或 IS NOT NULL 条件

         对于Oracle 索引来说,如果一个索引列的某个值为空,该值将不存在于索引列中。

15、使用WHERE 子句优化GROUP BY (内容同7)

         使用WHERE 子句实现部分HAVING 子句的功能。

16、处理预定义异常

 

17、处理自定义异常

 

本内容摘自《Oracle 数据库编程经典300例》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值