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转化成相对应的相关操纵符” 的概念. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |