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

豆豆网   技术应用频道   2008年02月19日  【字号: 收藏本文

本文详细介绍Oracle语句优化规则汇总(6)

  这里,DEPTNO索引将被最先检索,然后同EMP_CAT索引检索出的记录进行合并。 执行路径如下:

  TABLEACCESSBYROWIDONEMP
  AND-EQUAL
  INDEXRANGESCANONDEPT_IDX
  INDEXRANGESCANONCAT_IDX

  3. 等式比较和范围比较

  当WHERE子句中有索引列, ORACLE不能合并它们,ORACLE将用范围比较。

  举例:

  DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引。

  SELECTENAME
  FROMEMP
  WHEREDEPTNO>20
  ANDEMP_CAT=‘A’;

  这里只有EMP_CAT索引被用到,然后所有的记录将逐条与DEPTNO条件进行比较。 执行路径如下:

  TABLEACCESSBYROWIDONEMP
  INDEXRANGESCANONCAT_IDX

  4. 不明确的索引等级

  当ORACLE无法判断索引的等级高低差别,优化器将只使用一个索引,它就是在WHERE子句中被列在最前面的。

  举例:

  DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引。

  SELECTENAME
  FROMEMP
  WHEREDEPTNO>20
  ANDEMP_CAT>‘A’;

  这里, ORACLE只用到了DEPT_NO索引。 执行路径如下:

  TABLEACCESSBYROWIDONEMP
  INDEXRANGESCANONDEPT_IDX

  译者按:我们来试一下以下这种情况:

 SQL> select index_name, uniqueness from user_indexes where table_name = 'EMP';
  INDEX_NAME           UNIQUENES
  ------------------------------ ---------
  EMPNO             UNIQUE
  EMPTYPE            NONUNIQUE
  SQL> select * from emp where empno >= 2 and emp_type = 'A' ;
  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 'EMPTYPE' (NON-UNIQUE

来源:豆豆网转载    作者:IT专家网 Peak Wong    责编:豆豆技术应用

正在加载评论...