加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle用WHERE替代ORDER BY

发布时间:2021-01-18 11:33:35 所属栏目:站长百科 来源:网络整理
导读:ORDER BY 子句只在两种严格的条件下使用索引. ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空. WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. 例如: ????? 表DEPT包含以下列: ??????? D

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)

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读