oracle不明确的索引等级
当ORACLE无法判断索引的等级高低差别,优化器将只使用一个索引,它就是在WHERE子句中被列在最前面的. ?? ??举例: ???? DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引. ???? ???? SELECT ENAME ???? FROM EMP ???? WHERE DEPTNO > 20 ???? AND EMP_CAT > ‘A’; ???? 这里,ORACLE只用到了DEPT_NO索引. 执行路径如下: ???? ???? TABLE ACCESS BY ROWID ON EMP ????????? INDEX RANGE SCAN ON DEPT_IDX 译者按: 我们来试一下以下这种情况: SQL> select index_name,uniqueness from user_indexes where table_name = ‘EMP‘; INDEX_NAME???????????????????? UNIQUENES ------------------------------ --------- EMPNO????????????????????????? UNIQUE EMPTYPE??????????????????????? NONUNIQUE SQL> select * from emp where empno >= 2 and emp_type = ‘A‘ ; 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 ‘EMPTYPE‘ (NON-UNIQUE) 虽然EMPNO是唯一性索引,但是由于它所做的是范围比较,等级要比非唯一性索引的等式比较低! (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |