WEB开发网
开发学院数据库Oracle Oracle语句优化规则汇总(6) 阅读

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

 2008-02-19 12:40:40 来源:WEB开发网   
核心提示: 这里,DEPTNO索引将被最先检索,Oracle语句优化规则汇总(6)(2),然后同EMP_CAT索引检索出的记录进行合并, 执行路径如下:TABLEACCESSBYROWIDONEMPAND-EQUALINDEXRANGESCANONDEPT_IDXINDEXRANGESCANONCAT

这里,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

Tags:Oracle 语句 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接