zoukankan      html  css  js  c++  java
  • oracle用WHERE替代ORDER BY

    ORDER BY 子句只在两种严格的条件下使用索引.

    ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.

    ORDER BY中所有的列必须定义为非空.

    WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

    例如:

          表DEPT包含以下列:

            DEPT_CODE    PK    NOT NULL

            DEPT_DESC           NOT NULL

            DEPT_TYPE           NULL

       

           非唯一性的索引(DEPT_TYPE)

         低效: (索引不被使用)

                SELECT DEPT_CODE

                FROM DEPT

                ORDER BY DEPT_TYPE

           EXPLAIN PLAN:

                SORT ORDER BY

                      TABLE ACCESS FULL

         高效: (使用索引)

               SELECT DEPT_CODE

               FROM DEPT

            WHERE DEPT_TYPE > 0

        EXPLAIN PLAN:

          TABLE ACCESS BY ROWID ON EMP

                 INDEX RANGE SCAN ON DEPT_IDX

     

          ORDER BY 也能使用索引! 这的确是个容易被忽视的知识点. 我们来验证一下:

    SQL>  select * from emp order by empno;

    Execution Plan

    ----------------------------------------------------------

       0      SELECT STATEMENT Optimizer=CHOOSE

       1    0   TABLE ACCESS (BY INDEX ROWID) OF 'EMP'

       2    1     INDEX (FULL SCAN) OF 'EMPNO' (UNIQUE)

  • 相关阅读:
    单例模式
    二、CSS
    十一、多线程
    十二、协程
    十、多进程
    九、内存管理
    八、元类
    七、上下文管理器/魔术方法
    六、单例模式
    五、装饰器
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11125524.html
Copyright © 2011-2022 走看看