• 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是唯一性索引,但是由于它所做的是范围比较, 等级要比非唯一性索引的等式比较低!

  • 相关阅读:
    windows上传代码到Gitee
    gitee推送报错error: failed to push some refs to
    socket和http区别
    腿姐考前叮嘱
    20数学真题答案
    windows下如何查看磁盘IO性能 复制于网络上
    初识WCF异常 1
    WCF中DBNull序列化的问题
    在SQL Server数据库之间进行数据导入导出
    在Silverlight中打开网页的几种方法
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11124896.html
Copyright © 2020-2023  润新知