Oracle的Order By结合ROWNUM查询写法效率问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Oracle的Order By结合ROWNUM查询写法效率问题

C4_CTI_CDR表是一个几百万数据的大表,cdr_id是主键自增序列,call_time是时间字段。

需求是按call_time倒序取出最近100条记录。

收集了两种不同写法,返回的结果都是一样的。

1、貌似是比较大众的写法

select * from (

select t.* from C4_CTI_CDR t order by call_time desc 

) where rownum <= 100;
在Navicat的查询编辑器里“解释”分析如下:
screenshot
哪种写法查询效率比较高?Navicat的解释我看不太懂,只是觉得好像第一种的层级少一些,而第二种写法的总Bytes(传输字节数?)少一些。

望大家不吝赐教,谢谢!

展开
收起
a123456678 2016-07-04 14:25:53 2230 0
1 条回答
写回答
取消 提交回答
  • 第二种写法更好,原因:
    从需求分析,结果只需要100条数据,写法1将所有数据的所有列都取出,然后筛选了前100条,写法2讲所有数据的cdr_id取出,筛选了前100条,然后通过主键检索所有字段(走了一个100次的NESTED LOOPS),所以总bytes数写法2较少

    2019-07-17 19:50:40
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
EasyDBforOracle— 基于阿里云的Oracle最佳实践
立即下载
Oracle云上最佳实践
立即下载
迁移 ORACLE 最佳实践
立即下载