zoukankan      html  css  js  c++  java
  • oracle不明确的索引等级

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

         举例:

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

        

         SELECT ENAME

         FROM EMP

         WHERE DEPTNO > 20

         AND EMP_CAT > ‘A’;

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

        

         TABLE ACCESS BY ROWID ON EMP

              INDEX RANGE SCAN ON DEPT_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)

    虽然EMPNO是唯一性索引,但是由于它所做的是范围比较, 等级要比非唯一性索引的等式比较低!

  • 相关阅读:
    LeetCode(62)Unique Paths
    4_蒙特卡罗算法求圆周率PI
    CentOS安装sctp协议
    3_寻找假币问题(分治法)
    Gdb调试命令
    高阶函数 -------JavaScript
    方法 -------JavaScript
    函数定义和调用 -------JavaScript
    iterable -------JavaScript
    Map和Set -----JavaScript
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11124896.html
Copyright © 2011-2022 走看看