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)

  • 相关阅读:
    STM32对HAL库的LCD驱动移植
    stm32对HAL库的DAC使用
    STM32对HAL库的ADC(多通道DMA)
    STM32对HAL库的ADC(单通道非DMA)
    STM32 fputc函数(重定向)
    STM32的HAL库DMA串口不定长度的读写操作(二)
    STM32对HAL库的PWM控制
    STM32对HAL库的定时器中断
    STM32对HAL库的外部中断处理
    C#上位机制作之串口接受数据(利用接受事件)
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11125524.html
Copyright © 2011-2022 走看看