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

  • 相关阅读:
    协方差与协方差矩阵
    boost.python笔记
    2014年8月3日
    工作记录
    工作记录
    工作记录
    sed教程
    Visual studio C++ 之空控制台工程添加文件并解决头文件包含问题
    Visual studio C++ MFC之列表控件CListCtrl Control
    Visual studio C++ MFC之点击按钮(菜单栏)生成新窗口
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11124896.html
Copyright © 2011-2022 走看看