`
xuyan2680
  • 浏览: 31737 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle语句优化规则三

阅读更多
转载来源:IT专家网 作者:Peak Wong
1. 删除重复记录
  最高效的删除重复记录方法 ( 因为使用了ROWID)

DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
                   FROM EMP X
                   WHERE X.EMP_NO = E.EMP_NO);

  2. 用TRUNCATE替代DELETE

  当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息。 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)

  而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此很少的资源被调用,执行时间也会很短。

  (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)

  3. 尽量多使用COMMIT

  只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:COMMIT所释放的资源:

  a. 回滚段上用于恢复数据的信息。

  b. 被程序语句获得的锁

  c. redo log buffer 中的空间

  d. ORACLE为管理上述3种资源中的内部花费

  (译者按: 在使用COMMIT时必须要注意到事务的完整性,现实中效率和事务完整性往往是鱼和熊掌不可得兼)

  4. 计算记录条数

  和一般的观点相反, count(*) 比count(1)稍快 , 当然如果可以通过索引检索,对索引列的计数仍旧是最快的。 例如 COUNT(EMPNO)

  (译者按: 在CSDN论坛中,曾经对此有过相当热烈的讨论, 作者的观点并不十分准确,通过实际的测试,上述三种方法并没有显著的性能差别)

  5. 用Where子句替换HAVING子句

  避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤。 这个处理需要排序,总计等操作。 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

  例如:

  低效
  
  SELECT REGION,AVG(LOG_SIZE)
  FROM LOCATION
  GROUP BY REGION
  HAVING REGION REGION != ‘SYDNEY’
  AND REGION != ‘PERTH’
  
  高效
  
  SELECT REGION,AVG(LOG_SIZE)
  FROM LOCATION
  WHERE REGION REGION != ‘SYDNEY’
  AND REGION != ‘PERTH’
  GROUP BY REGION
  (译者按: HAVING 中的条件一般用于对一些集合函数的比较,如COUNT() 等等。 除此而外,一般的条件应该写在WHERE子句中)

  6. 减少对表的查询

  在含有子查询的SQL语句中,要特别注意减少对表的查询。

  例如:

  低效
  
  SELECT TAB_NAME
  FROM TABLES
  WHERE TAB_NAME = ( SELECT TAB_NAME
  FROM TAB_COLUMNS
  WHERE VERSION = 604)
  AND DB_VER= ( SELECT DB_VER
  FROM TAB_COLUMNS
  WHERE VERSION = 604)
  
  高效
  
  SELECT TAB_NAME
  FROM TABLES
  WHERE (TAB_NAME,DB_VER)
  = ( SELECT TAB_NAME,DB_VER)
  FROM TAB_COLUMNS
  WHERE VERSION = 604)
  Update 多个Column 例子:

低效:
  
  UPDATE EMP
  SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES)
分享到:
评论

相关推荐

    Oracle语句优化规则汇总.pdf

    这篇文档“Oracle语句优化规则汇总.pdf”很可能提供了关于如何提高Oracle数据库查询效率、减少资源消耗的关键信息。以下是一些可能涵盖在文档中的关键知识点: 1. **索引优化**: - 使用合适的索引类型,如B树索引...

    超酷30个Oracle语句优化规则详解

    ### 超酷30个Oracle语句优化规则详解 #### 一、选用适合的Oracle优化器 在Oracle数据库中,优化器的选择对于查询性能至关重要。Oracle提供了三种优化器模式来帮助用户根据实际情况选择最合适的执行计划: 1. **...

    Oracle语句优化规则汇总

    Oracle数据库是全球广泛使用的...通过遵循这些Oracle语句优化规则,你可以显著提高数据库的性能,减少资源消耗,同时提高应用程序的响应速度。持续学习和实践,结合具体的业务场景,你会发现更多优化的策略和技巧。

    Oracle语句优化53个规则详解

    ### Oracle语句优化53个规则详解 #### 一、选用适合的Oracle优化器 在Oracle数据库中,优化器的选择对于SQL语句的执行效率至关重要。Oracle提供了三种优化器模式: 1. **基于规则的优化器(RULE)**:这是一种较...

    性能优化案例分析与Oracle语句优化53个规则详解

    本文将深入探讨"性能优化案例分析与Oracle语句优化53个规则详解"这一主题,涵盖Oracle语句优化、数据库优化以及SQL优化的关键知识点。 首先,Oracle语句优化是提升系统性能的核心手段之一。在"Oracle语句优化53个...

    30个Oracle语句优化规则详解

    本文将深入解析30个Oracle语句优化规则,聚焦于优化器的选择、表的访问方式以及SQL语句的共享机制。 首先,Oracle提供了三种优化器:基于规则的(RULE)、基于成本的(COST)和选择性(CHOOSE)。基于规则的优化器按照预...

    Oracle语句优化规则

    以下是根据标题、描述和部分内容提炼出的一些Oracle语句优化规则: 1. **选择合适的优化器**: ORACLE提供了三种优化器:基于规则(RULE)、基于成本(COST)和选择性(CHOOSE)。基于成本的优化器(CBO)是推荐的...

    oracle语句优化.docx

    "Oracle 语句优化" 本文将详细地介绍 Oracle 语句优化的方法和技巧,涵盖多表关联、EXISTS 和 IN 语句的使用、INDEX_JOIN 优化、WHERE 和 HAVING 语句的区别、NOT IN 和 <> 操作符的使用、LIKE 操作符的替代、UNION...

    Oracle语句优化规则汇总pdf版最新版本

    以下是对Oracle语句优化规则的总结:

    Oracle语句优化规则详解

    本文将深入探讨Oracle语句优化的44个规则中的几个关键点,以帮助提升系统的执行性能和内存利用效率。 首先,Oracle提供了三种不同的优化器:基于规则(RULE)、基于成本(COST)和选择性(CHOOSE)。基于规则的优化...

Global site tag (gtag.js) - Google Analytics