• 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)

  • 相关阅读:
    easyui combo自动高度(下拉框空白问题)
    log4net
    asp.net mvc 生成条形码
    Kubernetes 初探
    美国最顶级的投资机构在关注什么
    Ansible--01
    第一章 进入java的世界
    正则表达式
    zabbix接口调用注意事项--Python
    Docker+K8S实践
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11125524.html
Copyright © 2020-2023  润新知