zoukankan      html  css  js  c++  java
  • oracle避免在索引列上使用NOT

    通常, 我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的

    影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描.

       举例:

       低效: (这里,不使用索引)

       SELECT …

       FROM DEPT

       WHERE DEPT_CODE NOT = 0;

      

       高效: (这里,使用了索引)

      SELECT …

       FROM DEPT

       WHERE DEPT_CODE > 0;

       需要注意的是,在某些时候, ORACLE优化器会自动将NOT转化成相对应的关系操作符.

       NOT >  to  <=

       NOT >=  to  <

       NOT <  to  >=

       NOT <=  to  >

     

         在这个例子中,作者犯了一些错误. 例子中的低效率SQL是不能被执行的.

    我做了一些测试:

        

    SQL> select * from emp where NOT empno > 1;

    no rows selected

    Execution Plan

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

       0      SELECT STATEMENT Optimizer=CHOOSE

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

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

    SQL> select * from emp where empno <= 1;

    no rows selected

    Execution Plan

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

       0      SELECT STATEMENT Optimizer=CHOOSE

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

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

          两者的效率完全一样,也许这符合作者关于在某些时候, ORACLE优化器会自动将NOT转化成相对应的关系操作符的观点.

  • 相关阅读:
    获取html页面传递过来的参数
    jqueryWeiui+pagehelper滚动加载(实现分页)
    【JS】js随笔
    【Java】Java基础
    【FrameWork】Hibernate
    【FrameWork】Struts2
    去掉inline-block间的间隙
    javascript单例模式
    关于call/apply与bind的一点误解
    git笔记-常用命令
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11125110.html
Copyright © 2011-2022 走看看