oracle用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)
相关文章
- Oracle SQL
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
- Oracle数据库:oracle用命令定义非空not null,unique唯一性,主键primary key,外键foreign key,check检查,启用enable,禁用disable约束
- Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
- Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
- 【转】oracle CONNECT BY PRIOR叶子节点查找根节点
- oracle恢复broken的job,Oracle JOB异常中断原因分析
- Oracle sql查询
- 【Oracle学习笔记】where、group by、 having和order by如何连用
- Oracle递归查询,Oracle START WITH……CONNECT BY查询
- Mysql Order By 字符串排序,mysql 字符串order by
- oracle 优化GROUP BY
- oracle视图
- oracle-ORA-00942错误
- Oracle-left join两表关联只取B表匹配到的第一条记录【over partition by(分组后对组内数据排序)——“窗口函数”】
- 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
- 查询排序:order by case when理解(根据一个字段的多个值进行排序)、在order By子句中使用case语句的理解、ORDER BY 2 DESC 中 2 的理解
- Oracle 修改字段类型(varchar2-->clob)
- [Oracle 工程师手记] Windows 环境下,获取与 oracle 相关 registry 的小技巧
- [Oracle工程师手记] 通过 lsof 命令查找oracle client 端和 server 端进程
- [Oracle工程师手记]如何将一个特定的表空间恢复到一个特定的时间
- [Oracle]PDB Clone 方法
- Oracle学习笔记(5)——查询
- Oracle创建自增字段方法-ORACLE SEQUENCE的简介
- 【翻译自mos文章】检查$ORACLE_HOME是否是RAC的HOME的方法以及relink RAC的Oracle binary的方法
- oracle中 connect by prior 递归算法
- 学习python第四天——Oracle查询
- Oracle修改密码后,登录sys或者sysdba时一直提示:ORA-01017: invalid username/password; logon denied