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的查询编辑器里“解释”分析如下:
哪种写法查询效率比较高?Navicat的解释我看不太懂,只是觉得好像第一种的层级少一些,而第二种写法的总Bytes(传输字节数?)少一些。
望大家不吝赐教,谢谢!
第二种写法更好,原因:
从需求分析,结果只需要100条数据,写法1将所有数据的所有列都取出,然后筛选了前100条,写法2讲所有数据的cdr_id取出,筛选了前100条,然后通过主键检索所有字段(走了一个100次的NESTED LOOPS),所以总bytes数写法2较少
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。