2. 用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) |
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 系统优化大全 (18122篇文章)
- Oracle 10g基础应用 (4465篇文章)
- Oracle 10g优化恢复 (194篇文章)
- 性能调优 (271篇文章)
- 教你正确的理解什么是数据库恢复 (14次浏览)
- Oracle数据库系统使用的几条经验分享 (5次浏览)
- JDBC连接Oracle数据库的十个技巧 (4次浏览)
- Oracle数据库三种标准的备份方法 (4次浏览)
- Oracle数据库的四种启动方式 (3次浏览)
- 在TransactionScope中优先使用Oracle的.NET驱 (2次浏览)
- Eclipse连接Oracle数据库的具体步骤 (2次浏览)
- 如何手工创建Oracle数据库 (1次浏览)
- 提高Oracle数据库系统Import的性能 (0次浏览)
- Oracle 9i在AIX上的性能调整 (0次浏览)



