oracle用WHERE替代ORDER BY

Posted fanweisheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

以上是关于oracle用WHERE替代ORDER BY的主要内容,如果未能解决你的问题,请参考以下文章

Oracle的优化

1. 安装Oracle,配置环境 2. 实现查询From子句 3. 实现查询where子句 4. 实现查询order by子句

第二章:oracle_sql语句之限制(where子句)和排列数据(order by子句)

sql里 where和order by一起使用是怎样的顺序

oracle merge into 的这个该怎么用

Oracle:在 Where 子句中使用 Case 语句