`
chengnuoangel
  • 浏览: 70176 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

Oracle语句优化规则汇总(7)

 
阅读更多

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

  WHERE子句中,如果索引列是函数的一部分。优化器将不使用索引而使用全表扫描。

  举例:

  低效:

  SELECT …
  FROM DEPT
  WHERE SAL * 12 > 25000;

  高效:

  SELECT …
  FROM DEPT
  WHERE SAL > 25000/12;

  :这是一个非常实用的规则,请务必牢记

2. 自动选择索引

  如果表中有两个以上(包括两个)索引,其中有一个唯一性索引,而其他是非唯一性。

  在这种情况下,ORACLE将使用唯一性索引而完全忽略非唯一性索引。

  举例:

  SELECT ENAME
  FROM EMP
  WHERE EMPNO = 2326
  AND DEPTNO = 20 ;

  这里,只有EMPNO上的索引是唯一性的,所以EMPNO索引将用来检索记录。

  TABLE ACCESS BY ROWID ON EMP
  INDEX UNIQUE SCAN ON EMP_NO_IDX

  3. 避免在索引列上使用NOT

  通常,我们要避免在索引列上使用NOT NOT会产生在和在索引列上使用函数相同的影响。 ORACLE“遇到”NOT,他就会停止使用索引转而执行全表扫描。

举例:

  低效: (这里,不使用索引)

  SELECT …
  FROM DEPT
  WHERE DEPT_CODE NOT = 0;

  高效: (这里,使用了索引)

  SELECT …
  FROM DEPT
  WHERE DEPT_CODE > 0;

  需要注意的是,在某些时候, ORACLE优化器会自动将NOT转化成相对应的关系操作符。

  NOT > to <=

  NOT >= to <

  NOT < to >=

  NOT <= to >

  :在这个例子中,作者犯了一些错误。 例子中的低效率SQL是不能被执行的。

  我做了一些测试:

SQL> select * from emp where NOT empno > 1
 no rows selected
 Execution Plan
 ----------------------------------------------------------
    0      SELECT STATEMENT Optimizer=CHOOSE
 1    0   TABLE ACCESS BY INDEX ROWID OF 'EMP'
 2    1     INDEX RANGE SCAN OF 'EMPNO' UNIQUE
    SQL> select * from emp where empno <= 1

 no rows selected
 Execution Plan
 ----------------------------------------------------------
    0      SELECT STATEMENT Optimizer=CHOOSE
 1    0   TABLE ACCESS BY INDEX ROWID OF 'EMP'
 2    1     INDEX RANGE SCAN OF 'EMPNO' UNIQUE

  两者的效率完全一样,也许这符合作者关于在某些时候, ORACLE优化器会自动将NOT转化成相对应的关系操作符的观点。

4. >=替代>

  如果DEPTNO上有一个索引,

  高效:

  SELECT *
  FROM EMP
  WHERE DEPTNO >=4

  低效:

  SELECT *
  FROM EMP
  WHERE DEPTNO >3

  两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。

分享到:
评论

相关推荐

    Oracle语句优化规则汇总.pdf

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

    Oracle语句优化规则汇总

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

    oracle语句优化规则汇总

    本篇文章将深入探讨Oracle语句优化的若干关键规则,帮助你提升数据库的运行效率,减少资源消耗,提高应用的响应速度。 一、选择正确的索引策略 1. **选择合适的索引类型**:B树索引适用于常规查询,位图索引适合于...

    Oracle sql语句优化规则汇总

    ### Oracle SQL语句优化规则详解 #### 一、选择正确的优化器 在Oracle数据库中,SQL语句的执行效率很大程度上取决于所选的优化器。Oracle提供了三种优化器模式: 1. **基于规则的优化器(RULE)**:这是Oracle...

    oracle语句优化.docx

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

    Oracle语句优化规则详解【技术文档】

    本文将深入探讨Oracle语句优化的规则和技术,旨在帮助开发者和DBA提升查询效率,降低资源消耗,实现数据库性能的最大化。 一、理解执行计划 Oracle在处理SQL语句时会生成一个执行计划,它定义了数据的检索方式。...

    oracle优化规则总汇

    以下是一些关键的Oracle优化规则: 1. **选用适合的优化器**:Oracle提供了三种优化器:RULE(基于规则)、COST(基于成本)和CHOOSE(选择性)。COST优化器是最常用的一种,它基于对象的统计信息来决定最佳执行...

    oracle查询语句优化

    Oracle查询语句优化是数据库管理中至关重要的环节,能够显著提升系统性能,减少资源消耗。本文将围绕Oracle查询优化的29个小技巧进行深入探讨。 首先,选择合适的Oracle优化器至关重要。Oracle提供了三种优化器:...

    ORACLE配置文件优化

    6. **Oracle语句优化**:阅读"Oracle语句优化规则汇总.pdf"和"ORACLE-优化.txt"文件,可以学习到如何编写高效的SQL语句,如避免全表扫描,利用索引,减少子查询,以及使用适当的连接方式等。此外,了解并使用Oracle...

    oracle常用SQL语句(汇总版).zip

    本文件"oracle常用SQL语句(汇总版)"将对Oracle中的常用SQL语法进行详尽阐述。 1. 数据查询: - `SELECT`语句:这是SQL中最基本的查询语句,用于从表中检索数据。例如,`SELECT * FROM 表名;`将返回表中的所有记录...

    《oracle SQL性能优化》中文电子书

    3. **SQL语句优化**:包括编写高效的SQL语句,避免全表扫描,合理使用JOIN操作,减少子查询,以及使用绑定变量等技巧。理解SQL执行计划,学会使用`EXPLAIN PLAN`来分析和改进查询性能。 4. **表和分区设计**:表的...

Global site tag (gtag.js) - Google Analytics