oracle用WHERE替代ORDER BY

oracle用WHERE替代ORDER BY,第1张

概述ORDER BY 子句只在两种严格的条件下使用索引. ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空. WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. 例如:       表DEPT包含以下列:         DEPT_CODE    PK    NOT NULL         DEPT_DESC  

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用WHERE替代ORDER BY所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1163756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存